【问题标题】:compare lists in Haskell比较 Haskell 中的列表
【发布时间】:2011-11-28 23:20:15
【问题描述】:

我一直在尝试比较 Haskell 中的两个列表并找到答案 here

我想知道all (flip elem listx) input 是如何工作的,尤其是flip 在这里扮演的角色。

当我取出 flip 时,它不再起作用了。

【问题讨论】:

  • 注意:我怀疑这会是惯用的写法:all (`elem` listx) input。如果您了解反引号和运算符部分,这应该是有道理的。
  • 但是为什么这里 elem 是一个中缀呢?
  • 任何具有至少 2 个参数的函数都可以以中缀形式使用。因为e ´elem´ listelem e list 读起来更好,所以很多人更喜欢这种方式。
  • 但是两个参数是listx和input?所以这里不是前缀符号吗?
  • input 不是elem 的论据,相当。从左到右阅读。 all 接受两个参数,一个函数和一个列表,如果函数对列表中的所有内容都为真,则返回真。 elem 的参数是 listx 和一个来自输入的元素。

标签: haskell comparison flip


【解决方案1】:
  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.

【讨论】:

  • @n.m.我在Hoogleflip :: (a->b->c)->b->a->c 上找到了翻转的类型,这让我相信它是a elem listx,假设 a 是输入元素。现在为什么需要翻转是有道理的,而我必须在没有它的情况下使用反引号
猜你喜欢
  • 2016-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多