如何在erlang中检索列表的最后2项

时间:2015-09-29 08:20:59

标签: erlang

我正在寻找一个能在erlang中检索列表最后两个元素的函数。

我试过

lists:nthtail( lists:length(List) - 2, List)
没有运气,任何帮助表示赞赏。

2 个答案:

答案 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].