尝试创建一个函数来检查两个函数是否相等


checkEquality :: (Enum a, Eq b) => (a->b) -> (a->b) -> Bool
checkEquality f g = if f == g then True else False

我试图创建一个函数,将检查两个函数是否相等,但我似乎无法确定键入函数时究竟要做什么。如果我能得到一些建议,我将不胜感激。到目前为止我所尝试的是在这里

通过相等性意味着函数产生相同的结果如X^2 = X * X

虽然到目前为止的答案是正确的,因为一般情况下这是不可能做到的,但几乎是可能的就你的情况而言。在我看来,这似乎是给你的任务,所以我只给你一些提示/指针:

  • 一般来说,对于a -> b类型的两个任意函数是不可能做到的-所以它必须意味着你应该使用你已经提供的其他东西
  • 在数学中,对于两个函数,通常认为它们"在所有点上"相等就足够了,即对于所有输入值x, f(x) == g(x)
  • 在您的情况下,您确实可以检查结果是否相等-您有一个Eq b,允许您比较a -> b
  • 类型的两个函数的结果
  • 您唯一需要弄清楚的是-您是否有其他东西,这将允许您检查类型a的所有值?

答案是否定的,但只是因为我认为如果没有对a应该是什么(它应该有哪些其他实例)的额外约束,就不可能做到这一点——你已经可以"经历"了。通过使用Enum来设置类型为a的值,但是您不知道从哪里开始

最新更新