我正在尝试在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?
答案 0 :(得分: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]