2012-11-04 101 views
5

可能重複:
Comparing functions in Haskell比較功能和參數在Haskell

我學習Haskell,想知道的是,這樣的事情可能嗎? 我只想比較參數'function'是否等於函數a或b中的一個。這個怎麼做?

示例代碼:

a,b :: Integer -> Integer 
a x = x+1 
b x = x-1 

c function parameter = if function == a 
      then ... parameter -- Do a related stuff 
      else ... parameter -- Do b related stuff 
+0

我不是Haskell的專家,但爲了使用函數'(==)'參數必須是'Eq'類型類的一部分,我不認爲函數可以成爲類型類的一部分。 –

+6

從[這個答案](http://stackoverflow.com/a/4328965/195701):_'沒有,也永遠不會有一種方法來比較兩個函數的相等性。有一個數學證明,這是不可能的。一般來說.'_ – Miguel

+0

@ VincentSavard: instance Num b => Num(a - > b)其中 (f + g)x = fx + gx - ... – Fixnum

回答

2

我知道的,你可以比較兩個功能相等的唯一情況是,如果他們的域有值的數量有限。舉例來說,如果你有型的兩種功能:

f, g :: Bool -> A 

然後,他們都是平等的,如果他們是平等的,所有輸入端:

f == g = (f False == g False) && (f True == g True) 

然而,對於Int的情況下,他們在每一個可能的比較價值Int是不切實際和低效的。對於Integer,由於Integer沒有限制,因此無法完成。

正如@Miguel在他的評論中正確指出的那樣,具有非有限域的函數在一般情況下不能進行比較。