2011-05-16 40 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,因此實際上甚至不需要謂詞。

也許您已經考慮到一個更困難的問題,即將項目插入以正確的方式保存排序順序的排序列表。然而,問題中沒有太多提示這是你的問題。

相關問題