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

Sua*_*ado 1 erlang

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

我试过了

lists:nthtail( lists:length(List) - 2, List)
Run Code Online (Sandbox Code Playgroud)

没有运气,任何帮助表示赞赏.

P_A*_*P_A 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]
Run Code Online (Sandbox Code Playgroud)

或者您可以使用列表: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
Run Code Online (Sandbox Code Playgroud)


Hyn*_*dil 6

另一种方法是:

last_two([A, B] = L) -> L;
last_two([_|L]) -> last_two(L).
Run Code Online (Sandbox Code Playgroud)

它会减少堆上的垃圾:

[B, A | _] = lists:reverse(L), [A, B].
Run Code Online (Sandbox Code Playgroud)