我正在尝试从“计算智能书”中编译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在一些程序上运行..
请帮忙
答案 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
做同样的事情。所以只需找到并替换就可以了。