Проблема рекурсии в Haskell - синтаксическая проблема? - PullRequest
0 голосов
/ 01 марта 2012

У меня проблемы с определением рекурсии в функции, которую я написал.Я не уверен, что здесь не так, это может быть ошибкой синтаксиса.

По сути, я хочу определить, как я сделал для Not Expression, что выражение And вызывает метод, заменяющий снова.Но у меня есть серьезные вопросы, определяющие замену дважды для двух выражений, которые я могу принять.

substitute :: Expr -> [(Variable,Expr)] -> Expr
-- ...
substitute (Not e) x = substitute e x
substitute (And e1 e2) x = substitute e1 x substitute e2 x ---- ????? 

Если я получу And Wright, тогда вся функция будет работать.:) Кто-нибудь может помочь?

Спасибо

Ответы [ 2 ]

2 голосов
/ 01 марта 2012

Это должно работать:

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

Но я не совсем уверен, что это то, что вы хотите.Вам нужны другие случаи, когда substitute выполняет какую-то реальную работу.

2 голосов
/ 01 марта 2012

Когда вы говорите substitute e1 x substitute e2 x, вы передаете 5 аргументов substitute слева:

e1, x, substitute, e2, x.

substitute принимает только три аргумента. Вы, вероятно, хотите сделать что-то вроде (substitute e1 x) && (substitute e2 x), но я не уверен, что именно вы хотите, чтобы выражение разрешалось.

...