-2
我在Haskell中创建了一个可以执行简单的数学方程的小语言。在成立看起来像这样:log2Sim对于Haskell中的微型语言
data E = IntLit Int
| BoolLit Bool
| Plus E E
| Minus E E
| Multiplies E E
| Exponentiate E E
| Equals E E
deriving (Eq, Show)
我有所有这些工作,但现在我需要定义为E中的功能,保留采取日志基地2,如果有可能表达的真值。如果不可能,程序可能会中止(例如,使用非穷举模式例外)。
log2Sim :: E -> E
运行此的例子应该像
> log2Sim (IntLit 8)
IntLit 3
我需要log2Sim E添加到语言定义或有另一种方式?我试图像这样定义它:
log2Sim :: E -> E
log2Sim (Log a) = log2sim (eval a)
log2sim (IntLit x) = IntLit $ logBase 2 x
但是,这绝对是不正确的。
什么是不正确的?你会得到什么错误? – sclv
不在范围内:数据构造函数Log' 失败,已加载模块:无。 – JMV12