gpt4 book ai didi

haskell - 使用 Haskell 的简单解释器

转载 作者:行者123 更新时间:2023-12-02 07:27:15 25 4
gpt4 key购买 nike

我还在学习 Haskell,这个问题看起来很基础,但它已经困扰了我一段时间。

鉴于以下

data Term =
Number Integer
| Abs Term
| Plus Term Term
| Mult Term Term
deriving (Eq, Show)

我想创建一个解释器,例如,如果我调用,

evaluate (Plus (Number 10) (Number 10))

它将返回 20。下面是我到目前为止的结果

myabsolute :: Integer -> Integer
myabsolute n = if n >= 0 then n else -n

evaluate :: Term -> Integer
evaluate Plus = evaluate(t1) + evaluate(t2)
evaluate Mult = evaluate(t1) * evaluate(t2)
evaluate Abs = myabs(evaluate(t1))
evaluate _ = 0

我很困惑如何让 Number Integer 部分工作,因为我不知道如何提取数字并将它们映射到 t1PlusMultAbs 中的 t2

由于我还在学习,如果我做错了什么,请告诉我!

最佳答案

下面是 Plus 案例的工作方式:

evaluate :: Term -> Integer
evaluate (Plus t1 t2) = evaluate t1 + evaluate t2
...

Plus 构造函数有两个项,所以我们需要在模式中有两个名称(t1t2)。在这种情况下,t1t2 都是 Term 类型的值,这就是表达式 evaluate t1evaluate t2 有意义。

但是,Number 构造函数只有一个参数,例如3 号,所以它的大小写如下:

evaluate (Number x) = ...use x here...

此处变量 x 的类型为 Integer

关于haskell - 使用 Haskell 的简单解释器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26825518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com