小编Tor*_*308的帖子

在Haskell中递归修改数据结构的各个部分

大家好,我是Haskell的新手,我想创建一个可以应用DeMorgan关于逻辑表达式的法则的Haskell程序.问题是我无法将给定表达式更改为新表达式(在应用DeMorgan定律后)

具体来说,这是我的数据结构

data LogicalExpression = Var Char
        | Neg LogicalExpression
        | Conj LogicalExpression LogicalExpression
        | Disj LogicalExpression LogicalExpression
        | Impli LogicalExpression LogicalExpression
        deriving(Show)
Run Code Online (Sandbox Code Playgroud)

我想创建一个函数,它接受"LogicalExpression"并在应用DeMorgan定律后返回"LogicalExpression".

例如,每当我在logicalExpression中找到这种模式:Neg(Conj(Var'a')(Var'b'))时,我需要将其转换为Conj(Neg(Var'a')Neg(Var'b') ).

这个想法很简单,但是在haskell中很难实现,就像试图创建一个函数(让我们称之为Z)来搜索x并将其转换为y,所以如果Z给出"vx"它将它转换为"vy" "只代替在数据结构中使用的字符串"logicalExpression"而不是x它采用我提到的模式并再次吐出整个logicalExpression,但模式已更改.

PS:我希望函数采用任何复杂的逻辑表达式,并使用DeMorgan定律简化它

任何提示?

提前致谢.

haskell referential-transparency data-structures

3
推荐指数
2
解决办法
604
查看次数