我剛開始用Prolog的,我想不通,爲什麼下面,我希望它不工作。 我想創建一個謂詞,如果列表L2包含在L1中,則返回true。 這是我寫的:Prolog的謂詞問題
assert(contains (L1, L1)).
assert(contains(L1, [X|L2]):-member(X, L1), contains(L1, L2)).
assert(contains(L1, [])).
我想這將是相當於「如果X‘L3 = X | L2’是L1,也L2在L1那麼真」,用含有( L1,L2)被遞歸地轉換,直到所有成員都被遍歷並且我們剩下最後一個選項,或者我們找到一個不在L1中的成員,並且它將會使謂詞失敗。
不幸的是,似乎沒有這樣的。它似乎只返回成員(X,L1)的值,所以包含([1,2,3],[1,4,5])通過,但包含([1,2,3],[4, 1,5])不。
我在做什麼錯了?
您使用哪種Prolog實現?我無法在SWI-Prolog中重現您的問題(儘管它也不適用於此)。 – mercator 2009-06-27 16:41:13
SWI-Prolog版本2.7.12 – 2009-06-28 09:31:03
2.7.12?真?!嘗試像5.6.x或5.7.x一樣新的東西。 – Kaarel 2009-06-28 11:43:54