Lambda函数如何在Haskell中的列表上工作?

disho6za  于 2023-02-04  发布在  其他
关注(0)|答案(2)|浏览(238)

我有这行代码,但不太明白为什么结果是[False, False]

i :: [Bool]
i = filter (\x-> (not x)) [False,False,True,True,True]

我以为它会出来[True,True,True]
真的很感激在这里对结果做一个简短的解释。提前感谢

xlpyo6sf

xlpyo6sf1#

根据文件记载
filter应用于 predicate 和列表,返回满足 predicate 的元素列表,即[...]:

>>> filter odd [1, 2, 3]
[1,3]

定义i的表达式本质上是说:
从列表[False, False, True, True, True]中过滤not x等于True的布尔值x

  • 对于第一个条目,not FalseTrue,因此它被保留。
  • 对于第二个条目,not False再次是True,因此这也被保留。
  • 对于剩余的三个条目,not TrueFalse,因此丢弃这些条目。

结果是[False, False]

5gfr0r5j

5gfr0r5j2#

因为filter保留了 predicate 为真的元素,所以这些元素现在是False, False

相关问题