2011-01-07 98 views
0

我想從這個符號轉換:Prolog的DCG中:從編程符號轉換爲邏輯符號

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

標準邏輯符號即之類的東西and(A,B), or(A,B), neg(A)...

我認爲我做的好方法它會使用DCGs(我構想這個問題是因爲我想練習DCGs)。任何想法爲什麼我的轉換不起作用?到目前爲止,我剛剛寫了析取和情況,當我們得到一個變量。我想要的答案應該是(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]). 

回答

1

有一個在test_convert1/1語法錯誤。它應該閱讀

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

謝謝larsman,啊,真是太傻了。但這並沒有解決我的問題。將代碼放在這裏時,我只是做了一個複製/粘貼錯誤。不過謝謝。 – ale 2011-01-07 17:35:25

1

你的代碼中包括兩個錯誤:

  1. 在你不讀從分析列表X第一條。
  2. 切割DCG應該放在花括號外面。

工作版本是:

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

嗨,感謝您指出錯誤。由於某種原因,仍然沒有答案。你介意看看嗎?我認爲它可能在test_convert/1中? – ale 2011-01-07 16:03:00