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

How to retrieve the last 2 items of a list in erlang

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

我试过了

lists:nthtail( lists:length(List) - 2, List)

运气不好,感谢任何帮助。

您应该使用 length/1 而不是不存在的列表: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

另一种方法:

last_two([A, B] = L) -> L;
last_two([_|L]) -> last_two(L).

它在堆上产生的垃圾少于:

[B, A | _] = lists:reverse(L), [A, B].