Вопрос
Я пытаюсь скомпилировать 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 работает на некоторых программах.
Пожалуйста помоги
Решение
Я не думаю remove
является частью любой библиотеки Prolog - конечно, не Swi Prolog. Библиотека списков здесь.
Есть предикат delete
что делает то же самое, что использует код remove
за. Так что просто найти и заменить, и это должно работать.
Другие советы
Загрузить lists
библиотека с использованием
:- use_module(library(lists)).
Это дает вам доступ к lists:select/3
предикат, который делает то, что вы choose/3
следует сделать. lists:delete/3
почти ваш remove/3
, кроме как с аргументами в другом порядке.