0

我试图从这个符号转换:

A and (B or C) equ A and B or A and C)

到标准的逻辑符号,即类似的东西and(A,B), or(A,B), neg(A)...

我认为我这样做的好方法是使用 DCG(我提出这个问题是因为我想练习 DCG)。任何想法为什么我的转换不起作用?到目前为止,我刚刚写了析取和得到变量的情况。我想要的答案应该是 or(atom(X),atom(Y))。

convert1(atom(X)) --> [X], {var(X)},!.
convert1(or(X,Y)) --> convert1(X), [or], convert1(Y).

test_convert1( F ) :-
   phrase( convert1( F ), [X, or, Y] ).
4

2 回答 2

1

您的代码包含两个错误:

  1. 在第一个子句中,您不是X从解析列表中读取的。
  2. DCG 中的切口应位于花括号之外。

一个工作版本是:

convert1(atom(X)) --> [X], {var(X)}, !.
convert1(or(X,Y)) --> convert1(X), [or], convert1(Y).   
于 2011-01-07T15:46:35.527 回答
1

中存在语法错误test_convert1/1。它应该读

test_convert1(F) :-
    phrase(convert1(F), [X, or, Y]).
于 2011-01-07T17:16:48.860 回答