我在编写的函数中定义递归时遇到问题。我不确定这里有什么问题,它可能是一种语法错误。
基本上我想要像Not表达式那样定义And表达式再次调用方法替换。但我是havig问题,两个表达式两次定义替代品并且可以采取。
substitute :: Expr -> [(Variable,Expr)] -> Expr
-- ...
substitute (Not e) x = substitute e x
substitute (And e1 e2) x = substitute e1 x substitute e2 x ---- ?????
如果我得到并且正确,那么整个功能将起作用。 :)有人可以帮忙吗?
由于
答案 0 :(得分:2)
当您说substitute e1 x substitute e2 x
时,您将5个参数传递给左侧的substitute
:
e1
,x
,substitute
,e2
,x
。
substitute
只需要三个参数。您可能想要执行(substitute e1 x) && (substitute e2 x)
之类的操作,但我不确定您希望表达式解析为什么。
答案 1 :(得分:2)
这应该有效:
substitute (Not e) x = Not (substitute e x)
substitute (And e1 e2) x = And (substitute e1 x) (substitute e2 x)
但我不确定这是不是你想要的。你需要一些substitute
做一些实际工作的其他案例。