【发布时间】:2011-05-06 01:16:14
【问题描述】:
我在理解如何在 Haskell 中执行以下操作时有点问题:
假设我有一个类似的声明:
- a * (b + c)
- a + (b * c)
- a + (b * ( c + d))
- a * (b + ( c * d))
- 等。等
我想在树中表达这些语句并评估每个语句的结果,对于初学者,我定义了以下数据结构:
data statement = Number Int
| Product statement statement
| Sum statement statement
deriving (Eq, Show)
对于一个可以使用的示例树,我使用了以下函数:
a :: statement
a = Product (Number 2) (Sum (Number 5) (Number 1))
现在我想构建一个函数 treeResult,它给我定义的语句的结果,但我不知道如何解决这个问题。上述语句返回的整数应该是 12。
我的第一个猜测是编写一个将“语句”作为参数并返回一个 int 的函数,对于初学者来说只能使用简单的语句。
treeResult :: statement -> Int
treeResult (Number a) = a
treeResult (Product (Number a) (Number b)) = a*b
treeResult (Sum (Number a) (Number b)) = a+b
现在我知道我需要一些可以递归的东西,但我不知道如何在 haskell 中编写它,请问有人可以帮我吗?
【问题讨论】:
标签: haskell recursion functional-programming expression-trees