2011-10-01 20 views
0

比較列表我一直在試圖比較哈斯克爾兩個列表,並找到了答案here
不知
all (flip elem listx) input
如何工作特別是對角色翻轉在這裏踢球。
當我拿出翻轉它不會工作了。在Haskell

+5

注意:我懷疑這會被習慣性地寫成:''all('elem' listx)input''。如果你知道反引號和操作符部分,這應該是有道理的。 – luqui

+0

但爲什麼elem是這裏的中綴? – manuzhang

+0

至少有2個參數的任何函數都可以以中綴形式使用。而且因爲'e'elem'list'比'elem e list'要好,所以很多人都喜歡這樣。 – Ingo

回答

9
  1. flip elem listx相當於(flip elem) listx
  2. (flip elem)elem相同,但參數的順序相反。這是flip所做的。
  3. elem是一個函數,它接受一個元素和一個列表,並檢查元素是否屬於列表。
  4. 所以flip elem是一個函數,它需要一個列表和一個元素,並檢查元素是否屬於列表。
  5. 因此flip elem listx是一個函數,它接受一個元素並檢查元素是否屬於listx
  6. 現在all接受謂詞和列表,並檢查列表中的所有元素是否滿足謂詞。
  7. all (flip elem listx)取一個列表,並檢查列表中的所有元素是否滿足flip elem listx。也就是說,它們是否都屬於listx
  8. all (flip elem listx) input檢查input的所有元素是否屬於listx
  9. Q.E.D.
+0

非常好的解釋。幾乎是藝術的。 :-) – luqui

+0

@ n.m。我在[Hoogle](http://hackage.haskell.org/packages/archive/base/latest/doc/html/Prelude.html#v:flip)上找到了翻轉類型flip ::(a-> b - > c) - > b-> a-> c'這使我相信它是'elem listx',假設a是輸入的一個元素。現在這是有道理的,爲什麼在這裏需要翻轉,而我必須在沒有翻轉的情況下使用反轉 – manuzhang