2010-12-01 56 views
1

我想從「計算智能書」中解決約束滿足問題編譯csp.pl。我想用它作爲解決填字遊戲發生器的基礎。刪除:序言

但是當我嘗試運行代碼,它給

Existence error in user:remove/3 
! procedure user:remove/3 does not exist 
! goal: user:remove([1,2,3,4],3,_127) 
| ?- :- 

我想刪除不是一個內置的謂詞

% select(E,L,L1) selects the first element of 
% L that matches E, with L1 being the remaining 
% elements. 
select(D,Doms,ODoms) :- 
    remove(D,Doms,ODoms), !. 

% choose(E,L,L1) chooses an element of 
% L that matches E, with L1 being the remaining 
% elements. 
choose(D,Doms,ODoms) :- 
    remove(D,Doms,ODoms). 

這是代碼的一部分......任何人都可以請幫我解決這個問題... 代碼應該在教科書中執行,因爲它聲稱在一些程序上運行hv ..

請幫忙

回答

1

我不認爲remove是任何Prolog庫的一部分 - 當然不是SWI Prolog。列表庫是here

有一個謂詞delete,它的作用與代碼使用remove相同。所以只需找到並替換,它應該工作。

3

裝入lists library使用

:- use_module(library(lists)). 

這使您可以訪問lists:select/3斷言,這確實你choose/3應該做的事情。 lists:delete/3幾乎就是您的remove/3,除了以不同順序的參數。