2016-05-01 114 views
1

我想在Erlang中做一個butlast函數,如果你給它一個列表,它將返回一個沒有最後一個元素的列表。這是我有:Erlang butlast函數

butlast([]) -> undefined; 
butlast([H, _]) -> H; 
butlast([H|T]) ->[H|butlast(T)]. 

然而,我的輸出是這樣的:

butlast([1,2,3,4,5,6]). 
[1,2,3,4|5] 

這究竟是爲什麼?管道運營商|是不是應該把4和5放在一起?

回答

3

在第二種情況,你應該返回[H]而不是H

-module(a). 
-compile(export_all). 

butlast([]) -> undefined; 
butlast([H, _]) -> [H]; 
butlast([H|T]) ->[H|butlast(T)]. 

測試:

1> c(a). 
{ok,a} 
2> a:butlast([1, 2, 3, 4, 5, 6]). 
[1,2,3,4,5] 
+0

@Ccyan - 你感謝最多投票和選擇複選標記,而不是評論。 –

+1

@JarrodRoberson我已經投了票,並會盡快接受答案,只要它允許我。只是想表示感謝。 – Ccyan

+2

這個版本不適用於長度爲1的列表,第二個子句應該是:'butlast([_]) - > [];' – Pascal