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

コードには2つの間違いが含まれています。

  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 に答える