【发布时间】:2011-04-23 03:15:27
【问题描述】:
我在理解 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).
如何编写这段代码?
【问题讨论】: