Haskell中Lambda函数处理列表的原理及filter代码结果疑问解答
Haskell中Lambda函数处理列表的方式及代码问题解析
Lambda函数处理列表的逻辑
Lambda是Haskell里的匿名函数,在列表操作中主要作为高阶函数(如map、filter、fold系列)的参数,用来定义单个元素的处理规则:
- 配合
map时,Lambda会接收列表中的每个元素,返回转换后的值,最终生成一个新列表,比如map (\x -> x + 1) [1,2,3]会得到[2,3,4] - 配合
filter时,Lambda是一个判断条件,返回布尔值,filter会保留所有让Lambda返回True的元素 - 配合
foldl/foldr时,Lambda定义累加逻辑,遍历列表时不断更新累加器的值
你的代码结果解释
你写的filter (\x -> (not x)) [False,False,True,True,True]里,filter的作用是保留所有让Lambda表达式返回True的元素:
- 当元素是
False时,not False的结果是True,所以这个元素会被保留 - 当元素是
True时,not True的结果是False,所以这个元素会被过滤掉
原列表里前两个元素是False,后三个是True,最终自然得到[False, False]。如果想得到[True,True,True],把Lambda改成(\x -> x)即可,或者直接用filter id(id是返回自身的函数,等价于\x -> x)。
内容的提问来源于stack exchange,提问作者Thmscode
相关产品推荐
相关产品推荐

