2014-03-12 30 views
0

我對Prolog非常陌生,我正在嘗試使用'append'。我正在嘗試編寫一個非常簡單的程序,將列表中的第一項添加到列表L中,並將其添加到空列表中。在Prolog中使用append

請問有人請向我解釋爲什麼這樣做不起作用?

add_first([A|_],L) :- append(A,_,L). 

另一個簡短的問題。

爲什麼此代碼有效?

add_first([A|B],L) :- append(B,A,L). 

但是這段代碼不?

add_first([A|B],L) :- append(A,B,L). 

非常感謝。

+0

這些例子都沒有,即使append按照您的想法工作,似乎也反映了您爲'add_first'提供的口頭定義。你能舉一個你想讓'add_first'成功工作的實例嗎?這個描述意味着你想要'add_first([1,2,3],L)'產生'L = [1]'。但是你的'append'例子都涉及'[1,2,3]'的尾部,這在這種情況下看起來並不相關。 – lurker

回答

1

那麼,A是列表的頭[A|B]B是一個子列表。 A是一個元素,所以如果你讀追加的定義:

append([],L,L). 
append([H|T],L2,[H|L3]) :- append(T,L2,L3). 

你會明白,列表的第一個參數是一個列表。所以你不能給一個元素。

append(A,B,L)是錯誤的。