相关疑难解决方法(0)

Haskell中函数的相等性

我试图定义一个函数,它将获取一个Double -> Double函数并返回其数学导数.我尝试过以下操作:

der :: (Double -> Double) -> (Double -> Double)
der f
    | f == exp = exp
    | otherwise = undefined
Run Code Online (Sandbox Code Playgroud)

但哈斯克尔不支持==Double -> Double值.我在Haskell尝试做什么是不可能的?

haskell equality

14
推荐指数
2
解决办法
4429
查看次数

两个功能是否相同?

[编辑]

一般的问题似乎难以解决.以下是此问题的严格限制版本.


如何确定函数的相等性?

我们可以说

function f() {
    // black box code.
}

function g() {
    // black box code.
}
Run Code Online (Sandbox Code Playgroud)

我们采用函数的数学定义.所以

if for all x in domain, f(x) === g(x) then f === g

  • 我们如何处理域名?
  • 我们怎么能确定是否 f === g

按源代码检查是愚蠢的,因为

function f(i) {
     return i % 2;
}

function g(i) {
     var returnVal = i % 2;
     return returnVal;
}
Run Code Online (Sandbox Code Playgroud)

显然是平等的.这些是微不足道的例子,但你可以想象更复杂的函数是相等的但不是源相等的.

您可能会认为f并且g没有我们关心的副作用.


[编辑]

正如@Pointy提到的那样,最好限制域名.而不是让相等函数尝试并猜测域,相等函数的用户应该提供域.

在没有在某处定义域的情况下询问两个函数是否相等是没有意义的.

简单地说,我们可以假设域的问题是所有整数的集合或其子集,所以我们需要一个函数:

function equal (f, g, domain) {

}
Run Code Online (Sandbox Code Playgroud)

域的结构是无关紧要的,可以使问题尽可能简单.您也可以假设 …

javascript comparison equality function

12
推荐指数
2
解决办法
4588
查看次数

标签 统计

equality ×2

comparison ×1

function ×1

haskell ×1

javascript ×1