我正在尝试编写一个递归函数,它将列表向下传递给自身,并在每个级别向该列表添加一个元素。最终列表应作为谓词的解决方案报告回来。但我不知道该怎么做。问题的形式基本上是这样的:
solve(List, NumberOfSteps) :- NumberOfSteps = 10 . //Stops after 10 recursive steps
solve(List, NumberOfSteps) :-
append NumberOfSteps to List,
NumberOfStepsIncremented is NumberOfSteps + 1,
solve(List, NumberOfStepsIncremented) .
所以我想在这里调用solve(List, 1)并让Prolog返回一个如下所示的答案:
List = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] ;
true
我可以让 Prolog 创建列表并在最后打印出来。我可以通过使用内置的预测追加(List,NumberOfSteps,List2)然后通过递归向下传递List2并在最后打印它来做到这一点,但是List和List2在那里并不统一,Prolog给出的实际答案我是 List = [] ;正确
我有一种感觉,我可能会以错误的方式解决这个问题,但我陷入了困境!
谢谢。
最佳答案
我明白了。它应该是这样的:
solve(List, NumberOfSteps) :- NumberOfSteps = 10 . //Stops after 10 recursive steps
solve([LHead | LTail], NumberOfSteps) :-
LHead = NumberOfSteps,
NumberOfStepsIncremented is NumberOfSteps + 1,
solve(LTail, NumberOfStepsIncremented) .
关于list - 在 Prolog 中使用递归创建数据列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12884340/