【发布时间】:2020-11-14 01:15:44
【问题描述】:
我刚刚开始学习 Prolog,但我在理解递归概念时遇到了麻烦。现在,仅出于练习的目的,我正在尝试编写一个程序,将 10 个数字附加到一个列表中,然后打印出该列表。
这个程序的自我强加规则是列表必须在主谓词中“声明”(我不确定这是否是 Prolog 的正确词),它调用另一个谓词将数字附加到列表中.
这是我到目前为止所拥有的,我知道它不会起作用,因为我试图在 addToList 谓词的末尾重新定义 List,这在语言中是不允许的。
% Entry point that declares a list (`List`) to store the 10 numbers
printList(List) :-
addToList(0, List),
writeln(List).
% Base case - once we hit 11 we can stop adding numbers to the list
addToList(11, _).
% First case - this predicate makes adding the first number easier for me...
addToList(0, List) :-
append([], [0], NewList),
addToList(1, NewList),
append([], NewList, List). % This is valid, but List will just be [0] I think..
% Cases 1-10
addToList(Value, List) :-
append(List, [Value], NewList),
NextVal is Value+1,
addToList(NextVal, NewList),
append([], NewList, List). % This is INVALID since List is already defined
这个程序将开始于:
printList(List).
有没有一种简单的方法可以更改我编写的损坏程序以使其正常工作?我对如何获取存储在List 中的数字非常迷茫。
【问题讨论】: