Haskell-从无限数据列表中提取参数
假设我在我的 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]
回答
您可以构建一个列表,其中每个“叶子”都将添加到尾部,例如:
helper :: Exp -> [Int] -> [Int]
helper (Expnum i) = (i:)
helper (Expplus sa sb) = helper sa . helper sb
现在我们可以使用这个助手来制作一个完整的列表,我把它留作练习。