I'm having problems understanding contrived recursion in Prolog.
Some helper predicates that are just append to beginning and end respectively:
add_number(Numbers, N, NewNumbers).
add_letter(Letters, L, NewLetters).
My goal is to take a list of letters and numbers and return two list: a list of numbers in order of appearance, incremented by 1; and a list of letters in reverse order of appearance. Here's my reasoning:
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, ???, ???).
The second and fourth arguments are accumulators.
Then it is supposed called like this:
realfoo(Xs, Nums, Letters) :- foo(Xs, [], Nums, [], Letters).
How do I write this code?