在Prolog中追加列表

在Prolog中追加列表,prolog,prolog-lists,Prolog,Prolog Lists,序言SWI 假设我有一个递归函数,在每次迭代中向列表中添加X项。 看起来像: func(...,BigList):- func2(...,CurrentList), BigList = [ CurrentList | Tail ], func(..., Tail). 我试着去掉那些不重要的部分,以便于阅读 我会解释: 假设func向BigList添加一些项。 在每次迭代中,func2都会初始化CurrentList,它将被添加到BigList中 问题是BigLis

序言SWI

假设我有一个递归函数,在每次迭代中向列表中添加X项。 看起来像:

func(...,BigList):-
     func2(...,CurrentList),
     BigList = [ CurrentList | Tail ],
     func(..., Tail).
我试着去掉那些不重要的部分,以便于阅读

我会解释: 假设func向BigList添加一些项。 在每次迭代中,func2都会初始化CurrentList,它将被添加到BigList中

问题是BigList看起来像:

[[iter1item1,iter1item2,...,iter1itemX],[iter2item1,iter2item2,...,iter2itemX],..[iterXitem1,iterXitem2,...iterXitemX]]
而不是:

[iter1item1,iter1item2,...,iter1itemX,iter2item1,iter2item2,...,iter2itemX,..iterXitem1,iterXitem2,...iterXitemX]

我只想说这可能是一个简单的解决方案,但我对Prolog还不熟悉,20分钟的谷歌搜索并没有真正的帮助。我认识到这个问题,但不知道如何编写代码,使其按我所希望的方式工作。

使用内置谓词:
append(CurrentList,Tail,BigList)
@mbrach,我找到了这个谓词,问题是我应该在哪里添加这一行?谢谢。你不用
BigList=[CurrentList | Tail],而是使用
append(CurrentList,Tail,BigList),
。根据谓词的工作方式,您可能必须依次交换
append
调用和
func
查询。顺便说一句,谷歌在“序言附加列表”上的第一个点击是::)@mbratch-Solved!谢谢如果你能简单地解释一下Prolog是如何在递归调用中将Tail选为空列表的,那就太好了。在本例中,我不知道如何同时使用“append”和让Tail成为空列表(我搜索了递归示例)。