Почему «Q» не объединяется в этой программе PROLOG - PullRequest
0 голосов
/ 24 марта 2010

Я пишу программу PROLOG, в которой интересующая переменная (Q) отказывается объединяться. Я обошел это с помощью хакерского решения (включая оператор write). Но должен быть способ сделать это объединенным, но ради любви ко мне я не могу понять это.

Я бы очень признателен за любую помощь. Заранее спасибо.

Вот мой код (я аннотировал везде, где исключил код для краткости)

:- use_module(library(bounds)).
:- use_module(library(lists)).

solve([17],Q,_,_,_):- write(Q). %this is the hacky workaround
solve(L,Q,1,3,2) :- jump(L,Q,N,1,3,2,R), solve(N,R,S,D,M), member([S|[D|[M|[]]]],[[1, 3, 2], [1, 9, 4], [2, 10, 5] this list contains 76 items - all of which are lists of length 3. I have omitted them here for the sake of brevity]).
% there are about 75 other definitions for solve, all of which are structured exactly the same. The only difference is that the numbers in the input parameters will be different in each definition

jump(L,Q,N,S,D,M,R):- member(S,L), not(member(D,L)), member(M,L), delete(L,S,X), delete(X,M,Y), append(Y,[D],N), append(Q,[[S,D]],R).

cross_sol(Q) :- solve([5,9,10,11,17,24],Q,S,D,M), member([S,D,M], [
I have edited out this list here for the sake of brevity. It is the same list found in the definition of solve
]).

Почему-то Q не объединяется. Пожалуйста помоги! Спасибо!

1 Ответ

1 голос
/ 26 марта 2010

Предикат cross_sol / 1 выглядит неправильно сформированным.

cross_sol(Q) :- solve([5,9,10,11,17,24],[],S,D,M), member([S,D,M], [ I have edited out this list here for the sake of brevity. It is the same list found in the definition of solve ]).

Переменная Q является синглтоном - на нее нет ссылок нигде в теле (если это не та часть, которую вы подавили).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...