我正在寻找一个能在erlang中检索列表最后两个元素的函数。
我试过
lists:nthtail( lists:length(List) - 2, List)
没有运气,任何帮助表示赞赏。
答案 0 :(得分:6)
您应该使用length/1而不是list:length / 1,它们不存在:
1> L = [1,2,3,4].
[1,2,3,4]
2> lists:nthtail(length(L)-2, L).
[3,4]
或者您可以使用lists:reverse/1和模式匹配:
1> L = [1,2,3,4].
[1,2,3,4]
2> [A, B | _] = lists:reverse(L).
[4,3,2,1]
3> A.
4
4> B.
3
答案 1 :(得分:6)
另一种方法:
last_two([A, B] = L) -> L;
last_two([_|L]) -> last_two(L).
它会减少堆上的垃圾:
[B, A | _] = lists:reverse(L), [A, B].