list - 在 Prolog 中使用递归创建数据列表

标签 list recursion prolog

我正在尝试编写一个递归函数,它将列表向下传递给自身,并在每个级别向该列表添加一个元素。最终列表应作为谓词的解决方案报告回来。但我不知道该怎么做。问题的形式基本上是这样的:

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/

相关文章:

python - 从列表类别创建递归列表

prolog - 我想用Prolog证明一些定理,但是它总是返回 "Out of global stack"

database - Prolog 在单独的数据库文本文件上插入、修改和删除事实

python - 将 reddit json 解析为 Python 数组并打印数组中的项目

r - 来自函数的消息被多次重复

python - 如何使用正则表达式检查两个子列表列表之间是否存在匹配?

python - 带字符串输出的递归计数

haskell - 为什么这个尾递归 Haskell 函数较慢?

data-structures - 在Prolog中创建队列结构

python - 在列表列表中查找值时遇到问题