询问DCG Prolog的答案

时间:2015-07-07 07:59:47

标签: prolog swi-prolog dcg

我有一个用prolog编写的DCG,试图将字符串翻译成简单的命题逻辑。

目前的规则是:   +表示OR,*表示AND, - 表示不

g(or(X,Y)) -->
    f(X),
    "+",
    g(Y).
g(X) -->
    f(X).

f(and(X,Y)) -->
   e(X),
   "*",
   f(Y).
f(X) -->
   e(X).

e(not(X)) -->
   "-",
   d(X).
e(X) -->
   d(X).

d(X)-->
   "(",
   g(X),
   ")".    
d(a)-->
   "a".
d(b)-->
   "b".

但是我遇到Out of local trace错误的问题。

此代码应该是正确的,但我如何要求Prolog提供and(not(or(a,b)),or(b,not(a)))作为-(a+b) * (b + -a)的答案

1 个答案:

答案 0 :(得分:0)

你的语法似乎很好,但你忘了处理/跳过空白

?- phrase(g(X), `-(a+b)*(b+-a)`).
X = and(not(or(a, b)), or(b, not(a))) ;
false.

(注意:我已手动删除所有空格,并使用SWI-Prolog扩展名作为代码列表文字。)