我希望用户输入为Diff x ^ 3并获得3x ^ 2
的答案如何为此评估编写算术表达式?
在haskell中执行此操作的最佳方法是什么?
谢谢。
答案 0 :(得分:5)
这是一个非常简单的版本;随意扩展 - 添加评估,几个变量,更多功能,术语分组,漂亮的打印,解析等。
data Expr = Const Float | Var | Sum Expr Expr | Product Expr Expr
deriving Show
diff :: Expr -> Expr
diff (Const _) = Const 0
diff Var = Const 1
diff (Sum f g) = Sum (diff f) (diff g)
diff (Product f g) = Sum (Product f (diff g)) (Product (diff f) g)
答案 1 :(得分:2)
答案 2 :(得分:0)
由supercooldave给出的自动区分对于你想要的东西来说有点重量级。更好,更简单地从你想要的东西开始,没有区别 - 一种将字符串解析为表达式树,评估它们并显示它们的方法。一旦你失败了,那么你只需要编写链规则和一些原语!
首先尝试一个简单的结构,如
Expr = ENum Double | EVar String | EBinOp BinOp Expr Expr | EUnaryOp UnOp Expr
BinOp = Mul | Add | Div | Pow
UnOp = Diff String | Negate | Abs