【问题标题】:Haskell - Extract arguments from infinite list of dataHaskell - 从无限的数据列表中提取参数
【发布时间】:2026-01-25 07:00:01
【问题描述】:

假设我在我的 haskell 代码中定义了以下数据结构

data Exp = Expnum Int - constant
          | Expplus Exp Exp - addition

从技术上讲,这个表达式可以有无数个术语。如果我想提取其条款,我该怎么做? (我想不出办法,因为我不确定如何在 Haskell 中处理无限数量的参数)

例如:

-- Example: (Expplus (Expplus (Expplus (Expnum 1) (Expnum 2)) (Expnum 3)) (Expnum 4))

extract :: Exp -> [Int]
... -- Not sure how to deal with infinite number of Expnum :(

-- Expected output [1,2,3,4]

【问题讨论】:

  • 您的示例和数据定义似乎有冲突。
  • 是的,感谢您指出这一点。我刚刚解决了这个问题

标签: haskell


【解决方案1】:

您可以构建一个列表,其中每个“叶子”都将添加到尾部,如下所示:

helper :: Exp -> [Int] -> [Int]
helper (Expnum i) = (i:)
helper (Expplus sa sb) = helper sa . helper sb

现在我们可以使用那个助手来制作一个完整的列表,我把它留作练习。

【讨论】: