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

Haskell中如何在列表推导式中使用高阶函数?

拆解Haskell列表推导式的执行过程

别担心,这个列表推导式看起来绕,拆成每一步就很清楚了!我们来逐个分析每个函数f的执行过程:

首先记住Haskell列表推导式的核心逻辑:按生成器的顺序依次遍历,先处理第一个生成器的每个元素,再针对该元素处理后续的生成器,最后把所有结果收集起来。

我们来看你的表达式:

[ f x | f<- [(+1),(*2),(3-)], x<-[1..(f 1)]]

第一步:处理第一个函数f = (+1)

这个函数的作用是给输入加1。

  • 先计算f 1:1 + 1 = 2,所以x的范围是[1..2],也就是x取1和2。
  • 分别计算f x:
    • 当x=1时:1 + 1 = 2
    • 当x=2时:2 + 1 = 3
  • 这部分得到的结果是:[2, 3]

第二步:处理第二个函数f = (*2)

这个函数的作用是给输入乘2。

  • 计算f 1:1 * 2 = 2,所以x的范围还是[1..2]。
  • 分别计算f x:
    • 当x=1时:1 * 2 = 2
    • 当x=2时:2 * 2 = 4
  • 这部分得到的结果是:[2, 4]

第三步:处理第三个函数f = (3-)

这个函数的作用是用3减去输入(注意Haskell中运算符作为函数时,(3-)等价于\x -> 3 - x)。

  • 计算f 1:3 - 1 = 2,所以x的范围依旧是[1..2]。
  • 分别计算f x:
    • 当x=1时:3 - 1 = 2
    • 当x=2时:3 - 2 = 1
  • 这部分得到的结果是:[2, 1]

最后合并所有结果

把三部分的结果按顺序拼接起来:
[2,3] ++ [2,4] ++ [2,1] = [2,3,2,4,2,1]

这就是你看到的最终返回值啦!如果还有其他列表推导式的问题,随时问~

内容的提问来源于stack exchange,提问作者xly0n

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:00:22