2016-04-28 88 views
3

如何在Prolog中將元素追加到列表的開頭?我需要的最終結果被稱爲像這樣:將元素追加到Prolog中的列表開頭

pushFront(8, [3, 1], NewList). % NewList is now [8, 3, 1]. 

我試圖實現它,如下所示:

pushFront(Item, [], [Item|_]). %Problematic 
pushFront(Item, [OldDequeH|OldDequeT], NewDeque) :- 
    leftPush(OldDequeH, OldDequeT, [Item|NewDeque]). 

但它不工作,我的想法TBH。任何人都可以描述我的實施有什麼問題以及需要進行哪些更改才能正常工作?

回答

7

要在列表的開頭添加元素,只要使用列表表示:

pushFront(Item, List, [Item|List]). 

的列表表示在內部使用利弊算符(.),所以一個列表[b,c,d]只是爲'.'(b,'.'(c, '.'(d, [])))語法糖。

這表示,你可以僅包裝另外的缺點仿函數,也就是說,如果你想要一個在列表L的前面加一個項目一個,你會包裝一個'.'(a, L),我們平時寫簡單地添加在前面的項目如[a|L]

+1

聖!就是這麼簡單...我有時候很笨,謝謝btw :) –

+0

問:爲什麼你把cons作爲一個函數而不是函數? –

+1

@MathuSumMut:在Prolog中沒有函數(除非你考慮在'is'的右邊使用的函數),你有用戶過程和系統謂詞。但是,在這裏你只是使用了一個Prolog有兩個表示的結構(列表)(列表表示,如'[item,item | TailItems]'和_cons_ representation(點函子'.')。你可以建立一個列表(結構)通過使用列表表示或使用點函子的_cons_表示。 – gusbro