【问题标题】:How to do the Comparison of Two Functions如何做两个函数的比较
【发布时间】:2011-10-14 04:11:56
【问题描述】:

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

【问题讨论】:

  • 我不太确定你在问什么?您是要求执行iden 还是?既然是这样,你自己有什么想法?
  • 函数 "iden" 可以检查 f(x) 和 g(x) 是否具有相同的值,其中 1
  • 你可以创建一个递归函数来测试 f(i) = g(i),对于 i = 1,然后对于 i+1、i+2、i+3...正如你所描述的那样
  • 我有另一种方法可以做到这一点,方法是创建一个将函数 g 和 f 映射到它的列表,然后比较两个列表。无论如何,谢谢你的回答:)

标签: sml


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2016-04-26
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 2016-12-08
    • 2018-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多