Prolog中的算术表达式

时间:2014-12-03 09:24:35

标签: prolog dcg

我获得了一个无上下文语法,用于定义给定情况下有效算术表达式的含义。问题是将它写在haskell和Prolog中。这是CFG。

Expr ::= lit(i)
| add(Expr, Expr)
| sub(Expr, Expr)

在Haskell中它非常简单。我只是使用数据类型,称之为Expr,然后关闭。这是我写的:

data Expr = Lit Integer |
            Add Expr Expr |
            Sub Expr Expr

但是我很想在Prolog中写它。此外,运行expr(E),其中E是一个算术表达式,如果它确实是一个由CFG定义有效的表达式,则应该计算为true。到目前为止,我写了这个,但我不认为这是正确的。所以帮我解决一下。

expr(lit(i), i).
expr(add(expr(), expr()), Res).
expr(sub(expr(), expr()), Res).

1 个答案:

答案 0 :(得分:3)

由于您不需要评估表达式,因此代码可能是

expr(lit(_)).
expr(add(E1,E2)) :- expr(E1), expr(E2).
expr(sub(E1,E2)) :- expr(E1), expr(E2).