我在执行 readsPrec 以解析以下数据结构的输入时遇到问题:
data Term = Monom Int Int
| Addition Term Term
| Subtraction Term Term
| Multiplication Term Term
| Division Term Term
我已经实现了一个 show 实例,它使 monom 看起来像:
let k = Monom 2 3
Main.show k
返回:
(2x^3)
和
let m = Addition k k
Main.show m
返回:
(2x^3)+(2x^3)
与此同时,我要坐 5 个小时来完成这项任务,我真的不知道如何处理它。我的第一种方法如下所示:
instance Read Term where
readsPrec _ inp = let[(a,b)] = lex inp in
case a of
"x" -> readsPrec 0 b
"^" -> [(Monom 1 (read b::Int), "")]
c -> let[(d, "")] = readsPrec 0 b in
[(Monom (read c::Int) ((\(Monom x y) -> y) d), "")]
起初我感到非常高兴,直到我注意到这段代码除了 Monom 之外其他任何东西都不起作用。有人有更好的方法吗?