【发布时间】:2015-12-26 15:33:52
【问题描述】:
我正在寻找一个函数,它可以在 erlang 中检索列表的最后两个元素。
我试过了
lists:nthtail( lists:length(List) - 2, List)
运气不好,感谢任何帮助。
【问题讨论】:
标签: erlang
我正在寻找一个函数,它可以在 erlang 中检索列表的最后两个元素。
我试过了
lists:nthtail( lists:length(List) - 2, List)
运气不好,感谢任何帮助。
【问题讨论】:
标签: erlang
您应该使用 length/1 而不是 lists: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].
【讨论】: