Я не думаю, что я получаю рекурсию Пролога - PullRequest
0 голосов
/ 31 марта 2011

foo / 3 - это предикат, который делает что-то с двумя списками и выводит другой.

foo([], Ys, Zs) :-
    append(Zs, Ys, Final),
    write(Final),
    % ?

foo([X|Xs], Ys, Zs) :-
    stuff(X, Ys, NewYs, NewZs),
    foo(Xs, NewYs, NewZs).

Я хочу, чтобы Final был L в вызове верхнего уровня, как foo ([1,2, 3], [a, b, c], L).Я посмотрел на след, кажется, я делаю что-то задом наперед;

    ...
    Exit: (9) write([c]) ? 
    Exit: (8) foo([], [], [c]) ? 
    Exit: (7) foo([c], [], []) ? 
L = [].

1 Ответ

1 голос
/ 31 марта 2011

Вы можете исправить это, изменив foo([], Ys, Zs) на foo([], Ys, Final).

Однако, что вы пытаетесь сделать? Причина, по которой вы получаете L=[], заключается в том, что Prolog удовлетворил ваш базовый вариант (foo([], Ys, Zs)) пустым списком.

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