удалить: пролог - PullRequest
       24

удалить: пролог

1 голос
/ 01 декабря 2010

Я пытаюсь скомпилировать 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).

Это часть кода ... Может кто-нибудь, пожалуйста, помогите мне решить эту проблему ... Код должен выполняться, поскольку в учебнике утверждается, что он работает на некоторых программах ..

Пожалуйста, помогите

Ответы [ 2 ]

3 голосов
/ 01 декабря 2010

Загрузка библиотеки lists с использованием

:- use_module(library(lists)).

Это дает вам доступ к предикату lists:select/3, который делает то, что должен делать ваш choose/3.lists:delete/3 - это почти ваш remove/3, за исключением аргументов в другом порядке.

1 голос
/ 01 декабря 2010

Я не думаю, что remove является частью какой-либо библиотеки Prolog - конечно, не SWI Prolog.Библиотека списка здесь .

Существует предикат delete, который делает то же самое, что код использует для remove.Так что просто найди и замени и все заработает.

...