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)
| ?- :-

我认为 remove 不是内置谓词

% 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).

这是代码的一部分......谁能帮我解决这个问题......代码应该执行,因为在教科书中它声称可以在某些程序上运行..

请帮忙

4

2 回答 2

3

使用加载lists

:- use_module(library(lists)).

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

于 2010-12-01T13:20:44.090 回答
1

我不认为remove它是任何 Prolog 库的一部分——当然不是 SWI Prolog。列表库在这里

有一个谓词delete可以做与代码相同的事情remove。所以只需查找和替换,它应该可以工作。

于 2010-12-01T05:43:58.003 回答