我想知道如何比较两个函数F(x)
& 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
答案 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