我在理解Prolog中的设计递归时遇到了问题。序言列表和递归
一些辅助谓词只是附加到开始分别结束:
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).
我怎样写代码?