2010-12-01 68 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,除了以不同顺序的参数。