如何进行两种功能的比较

时间:2011-10-06 10:29:29

标签: sml

我想知道如何比较两个函数F(x)&amp; SML中的G(x),其中两个函数必须返回与f(x)==g(x)相同的值,其中1<= x <= 100。 例如:

- fun f x = x*x;    
val f = fn : int -> int
- fun g x = x+x;
val g = fn : int -> int
- iden f g;
val it = false : bool
- fun f x = x*x;
val f = fn : int -> int
- fun g x = if x<0 then 0 else x*x;
val g = fn : int -> int
- iden f g;
val it = true : bool

1 个答案:

答案 0 :(得分:0)

由于测试两个函数(程序)是否对所有输入都相同是不可计算的,因此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