2011-10-01 24 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