У меня проблемы с пониманием надуманной рекурсии в Прологе.
Некоторые предикаты-помощники, которые просто добавляются в начало и конец соответственно:
add_number(Numbers, N, NewNumbers).
add_letter(Letters, L, NewLetters).
Моя цель - взять список букв и цифр и вернуть два списка: список чисел в порядке появления, увеличенный на 1; и список букв в обратном порядке появления. Вот мои рассуждения:
foo([], [], [], [], []).
foo([X|Xs], Nums, NewNums, Letters, Letters) :-
number(X),
X1 is X+1,
add_number(Nums, X1, NewNums),
foo(Xs, ???, ???, Letters, Letters).
foo([X|Xs], Nums, Nums, Letters, NewLetters) :-
letter(X),
add_letter(Letters, X, NewLetters),
foo(Xs, Nums, Nums, ???, ???).
Второй и четвертый аргументы являются аккумуляторами.
Тогда это должно называться так:
realfoo(Xs, Nums, Letters) :- foo(Xs, [], Nums, [], Letters).
Как мне написать этот код?