You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 07:02:12