删除:prolog

时间:2010-12-01 05:32:57

标签: prolog sicstus-prolog

我正在尝试从“计算智能书”中编译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在一些程序上运行..

请帮忙

2 个答案:

答案 0 :(得分:3)

使用

加载lists library
:- use_module(library(lists)).

这使您可以访问lists:select/3谓词,该谓词执行choose/3应该执行的操作。 lists:delete/3几乎是你的remove/3,除了参数的顺序不同。

答案 1 :(得分:1)

我认为remove不是任何Prolog库的一部分 - 当然不是SWI Prolog。列表库是here

有一个谓词delete与代码使用remove做同样的事情。所以只需找到并替换就可以了。