向DCG Prolog询问答案
我有一个用prolog编写的DCG,它试图将字符串转换成简单的命题逻辑 目前的规则是: +表示或,*表示和,-表示不向DCG Prolog询问答案,prolog,swi-prolog,dcg,Prolog,Swi Prolog,Dcg,我有一个用prolog编写的DCG,它试图将字符串转换成简单的命题逻辑 目前的规则是: +表示或,*表示和,-表示不 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).
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".
但是,我遇到了本地跟踪之外的问题
错误
这段代码应该是正确的,但是我如何要求Prolog给出
和(不是(a,b)),或(b,不是(a))
作为-(a+b)*(b+-a)
的答案呢?你的语法看起来不错,但你忘了处理/跳过空格
?- phrase(g(X), `-(a+b)*(b+-a)`).
X = and(not(or(a, b)), or(b, not(a))) ;
false.
(注意:我已经手动删除了所有空格,并使用SWI Prolog扩展用于代码文本列表。)?-短语(g(X),
-(a+b)*(b+-a)
)。错误:语法错误:运算符预期错误:短语(g(X),-(a+b)*(错误:**此处**错误:b+-a)
)。您使用了哪些扩展名?我是指输入周围的反勾号-您可以在我的帖子中看到它们。。。否则,请使用?-atom_代码('-(a+b)*(b+-a)”,Cs),短语(g(X),Cs)。
@JoséValente:请注意,使用`
是特定于SWI的。所有其他系统要么拒绝这一点,要么对此做出不同的解释。因此::-设置prolog\u标志(双引号,代码)。
并将“
用于短语/2
。这在任何地方都有效。您可以使用语法生成所有句子,如:?-长度(L,N),短语(g(X),L)。