2011-05-16 42 views
0

我想编写一个Prolog程序在另一个列表中插入一个列表。例如:递归地插入一个元素到列表

% insert [1, 2] to [[1, 3, 4], [2, 5]] 
[[1, 3, 4], [2, 5], [1, 2]] 

我写了下面:

insertList([X], [], [[X]]). 
insertList([H|T], [H2|T2], [[H|T], H2|T2]). 

但这种方法只有一个列表补充说,因为没有递归。我如何在这种情况下进行递归?

insert(X, [], [X]). 
insert(X, [H|T], [X,H|T]). 

所以,我怎么做一个递归插入列表:在插入元素列表在此代码我有同样的问题?插入既可以在列表的开头,也可以在列表的末尾。

回答

0

大概最好看看下面的post其中第一个答案包含一个网站的链接,并解释了序言中的递归。解决上述问题是一个很好的起点。

1

显然你想要的是在列表的末尾插入一个项目。被插入的项目是一个列表这一事实在这里没有什么关键的区别。

insertAtEnd(X,[ ],[X]). 
insertAtEnd(X,[H|T],[H|Z]) :- insertAtEnd(X,T,Z). 

如果您想在开头插入,不需要递归!事实上,由于Prolog术语[X|L]在列表L的开头“插入”了项目X,因此实际上甚至不需要谓词。

也许您已经考虑到一个更困难的问题,即将项目插入以正确的方式保存排序顺序的排序列表。然而,问题中没有太多提示这是你的问题。

相关问题