Sml 如何比较两个函数

Sml 如何比较两个函数,sml,Sml,我想知道如何比较SML中的两个函数F(x)和G(x),哪两个函数必须返回与F(x)==G(x)相同的值,其中1 int -idenfg; val it=false:bool -funfx=x*x; val f=fn:int->int -fun g x=如果x int -idenfg; val it=true:bool 由于测试所有输入的两个函数(程序)是否相等是不可计算的,因此您的iden函数可能需要更多的参数,而不仅仅是其比较的两个函数 通常,您的iden将是: - fun iden f g

我想知道如何比较SML中的两个函数
F(x)
G(x)
,哪两个函数必须返回与
F(x)==G(x)
相同的值,其中
1 int
-idenfg;
val it=false:bool
-funfx=x*x;
val f=fn:int->int
-fun g x=如果x int
-idenfg;
val it=true:bool

由于测试所有输入的两个函数(程序)是否相等是不可计算的,因此您的
iden
函数可能需要更多的参数,而不仅仅是其比较的两个函数

通常,您的
iden
将是:

- fun iden f g elem = f(elem) = g(elem)
val iden = fn : ('a -> ''b) -> ('a -> ''b) -> 'a -> bool
在您的特定情况下,您可能希望执行以下操作:

- fun iden f g = let
=   fun iden_h f g (a, b) =
=     if a > b then iden_h f g (b, a)
=     else if a = b then f(a) = g(a)
=     else f(a) = g(a) andalso iden_h f g (a+1, b)
=  in
=   iden_h f g (1, 100)
=  end
val iden = fn : (int -> ''a) -> (int -> ''a) -> bool
-
- iden (fn x => x + x) (fn x => 2 * x);
val it = true : bool
- iden (fn x => x + x) (fn x => x * x);
val it = false : bool

我不太清楚你在问什么?您是否要求实施
iden
或?在这种情况下,你自己想出了什么主意?函数“iden”可以检查f(x)和g(x)是否具有相同的值,其中1你可以创建一个递归函数,测试f(i)=g(i),对于i=1,然后对于i+1,i+2,i+3。。。正如你所描述的那样,我有另一种方法,创建一个列表,将函数g和f映射到它,然后比较两个列表。无论如何,谢谢你的回答:)
- fun iden f g = let
=   fun iden_h f g (a, b) =
=     if a > b then iden_h f g (b, a)
=     else if a = b then f(a) = g(a)
=     else f(a) = g(a) andalso iden_h f g (a+1, b)
=  in
=   iden_h f g (1, 100)
=  end
val iden = fn : (int -> ''a) -> (int -> ''a) -> bool
-
- iden (fn x => x + x) (fn x => 2 * x);
val it = true : bool
- iden (fn x => x + x) (fn x => x * x);
val it = false : bool