Haskell中的递归问题-语法问题?

Haskell中的递归问题-语法问题?,haskell,recursion,syntax-error,Haskell,Recursion,Syntax Error,在我编写的函数中定义递归时遇到问题。我不确定这里出了什么问题,这可能只是一个语法错误 基本上,我想像对Not表达式那样定义,And表达式再次调用方法替换。但我有很大的问题,为这两个表达式定义两次subsitiue,并且可以接受 substitute :: Expr -> [(Variable,Expr)] -> Expr -- ... substitute (Not e) x = substitute e x substitute (And e1 e2) x = substitute

在我编写的函数中定义递归时遇到问题。我不确定这里出了什么问题,这可能只是一个语法错误

基本上,我想像对Not表达式那样定义,And表达式再次调用方法替换。但我有很大的问题,为这两个表达式定义两次subsitiue,并且可以接受

substitute :: Expr -> [(Variable,Expr)] -> Expr
-- ...
substitute (Not e) x = substitute e x
substitute (And e1 e2) x = substitute e1 x substitute e2 x ---- ????? 
如果我得到和wright,那么整个函数都将工作。:)有人能帮忙吗


谢谢

当您说
substitute e1 x substitute e2 x
时,您正在将5个参数传递给左侧的
substitute

e1
x
substitute
e2
x


substitute
只接受三个参数。您可能希望执行类似于
(替换e1 x)和&(替换e2 x)
的操作,但我不确定您希望表达式解析为什么

当您说
substitute e1 x substitute e2 x
时,您正在向左侧的
substitute
传递5个参数:

e1
x
substitute
e2
x

substitute
只接受三个参数。您可能希望执行类似于
(替换e1 x)和&(替换e2 x)
的操作,但我不确定您希望表达式解析为什么

这应该有效:

substitute (Not e) x = Not (substitute e x)
substitute (And e1 e2) x = And (substitute e1 x) (substitute e2 x)
但我不确定这是否是你想要的。您需要一些其他案例,其中
substitute
做了一些实际工作。

这应该可以:

substitute (Not e) x = Not (substitute e x)
substitute (And e1 e2) x = And (substitute e1 x) (substitute e2 x)

但我不确定这是否是你想要的。您需要一些其他案例,其中
substitute
做了一些实际工作。

您的
Not
案例删除了否定,这就是您想要的吗?如果是这样,您希望
substitute
情况下做什么?仅用于和调用带有变量e1和e2的函数替换。e1和e2可以是任何表达式,因此函数将处理之后发生的事情。只需要能够在和中调用这两个泛型类型的替换。除了语法错误,您还表现出概念错误的症状。当Haskell编程的方法是说出它是什么时,你似乎在说“做什么”(你如何在(不是e)中替换?你在e中替换)。替换x下(不是e)的图像是什么?肯定是(不是什么)!看到那个标志了吗?它只是通过说“这就是那”来定义。函数式编程文化冲击的很大一部分来自于从传统的编程“做”模式向这种“存在”模式的转变。这可能不是你所习惯的,但这是非常明智的,真的。你的
not
案例消除了否定,这就是你想要的吗?如果是这样,您希望
substitute
情况下做什么?仅用于和调用带有变量e1和e2的函数替换。e1和e2可以是任何表达式,因此函数将处理之后发生的事情。只需要能够在和中调用这两个泛型类型的替换。除了语法错误,您还表现出概念错误的症状。当Haskell编程的方法是说出它是什么时,你似乎在说“做什么”(你如何在(不是e)中替换?你在e中替换)。替换x下(不是e)的图像是什么?肯定是(不是什么)!看到那个标志了吗?它只是通过说“这就是那”来定义。函数式编程文化冲击的很大一部分来自于从传统的编程“做”模式向这种“存在”模式的转变。这可能不是你所习惯的,但这是非常明智的,真的。尽管如此,如果他不这样做,我可以预见下一个问题:“Haskell中的递归问题-为什么我会出现运行时错误?”尽管如此,如果他不这样做,我可以预见下一个问题:“Haskell中的递归问题-为什么我会出现运行时错误?”