2016-05-01 76 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