2011-08-28 37 views
8

在埃裏克·梅傑的chapter 4,他本質上寫道:在函數式編程基礎手動定義布爾結合

True &&& x | x == True = True 
      | x == False = False 

是不是這個不必要的冗長?我不能只是寫:

True &&& x = x 

甚至:

(&&&) True = id 

(&&&) False = const False   

順便說一句,爲什麼我不能寫出下面?

(True &&&) = id 

(False &&&) = const False   

ghci的響應與:

Parse error in pattern: True &&& 

回答

12

是的,你定義它的方式更好。從前奏:

True && x = x 
False && _ = False 

您只能在表達式中使用部分,而不能在模式中使用部分。 (True &&)不應該被允許在一個模式中沒有深層的原因。但是,這是一件非常罕見的事情,我不認爲這是值得的複雜。

+0

N.B.我認爲你*可以*寫成'(&&)'的模式。所以'(&&)True = id'可能會起作用。 –

+0

是的,但(&&)不是章節,而是中綴操作符的前綴形式,我認爲。 –

+0

@Erik Hesselink是的,但「前綴運算符」和「雙面部分」之間沒有語義上的區別。在定義操作符時,語言只允許一種語法,而不是其他語言。 – Carl