В вашем предикате вы используете две переменные, которые похожи (графически):
solve( N, [N] ) :-
goal( N).
solve( N, [<b>N1</b> | Sol] ) :-
s( N, <b>Nl</b>),
solve( <b>Nl</b>, Sol).
Здесь Nl
(с буквой L в нижнем регистре) выглядит аналогично N1
(с единицей 1). Фактически интерпретатор Prolog распознает, что N1
используется только один раз, и выдает предупреждение:
?- ['file.pl'].
Warning: /tmp/file.pl:8:
<b>Singleton variables: [N1] </b>
true.
Переменная N1
не имеет ничего общего с переменной Nl
, определенной в теле, и поэтому остается не объединенной.
Но, как говорится, если вы действительно хотите выводить здесь, вы должны использовать N
в конструкции "path", а не N1
, так как в противном случае для solve(a, L)
, L
начнется с b
, не a
, и дважды упомянет последний узел (здесь c
), поэтому:
solve( N, [N] ) :-
goal( N).
solve(N, [<b>N</b> | Sol]) :-
s(N, Nl),
solve(Nl, Sol).