2013-10-09 138 views
0

我有點prolog noob這就是爲什麼我問這裏,我找不到其他地方。比較列表的第一個和最後一個元素並追加

我試圖做的事情是這樣的功能,以不同的方式:

firstlast([H,H]). 
firstlast([F,_|T]):- firstlast([F|T]). 

它basicly發現,如果第一和最後一個元素與兩個或多個元素的列表相同。

現在我想用append來做這個函數,所以不用遞歸而只需要一個單獨的調用來追加。它應該如何工作

append([],U,U). 
append([H|T],U,[H|V]) :- append(T,U,V). 

例子:

firslasta([1,2,3,4,1]). 
true. 

firstlasta([1,3,4,1,5]). 
false- 

firstlasta([2,5,2,3,6,2]). 
true. 

任何幫助,這將大大appriciated :)。

+0

append需要三個列表。 '追加(A,B,A + B)'。你從來沒有分配過中間名單。 – User

+1

值得注意的是'append/3'本身是通過遞歸完成的,所以我認爲你不會通過使用它來節省任何計算能力。你的第一個答案似乎對我更優雅。 –

回答

2

很容易,使用慣用的Prolog:

識別列表的第一個元素,(頭,你懂的),我們使用[頭| _],其中下劃線,一個匿名的變種,停留一個未指定(不感興趣)的列表'尾巴。

在長度爲1的列表中,我們只是最後一個標識。然後將以Elem開頭的列表追加到1 Elem列表中:

firstlast(L) :- append([Elem|_], [Elem], L). 
相關問題