我刚刚开始使用Erlang(虽然有一些lisp背景)并且对列表上的模式匹配有疑问。
如果我说
[Head | Tail] = [1, 2, 3].
然后我得到
Head = 1
Tail = [2, 3]
如果我想从另一端做同样的事情而不反转列表两次,是否有一些succint模式呢?我希望能说出类似的话:
[All_but | last] = [1, 2, 3].
并获得:
All_but = [1, 2]
last = 3
感谢。
PS:我知道我的例子是不正确的行为。
答案 0 :(得分:2)
没有简洁的模式。您可以使用lists:last
和lists:droplast
函数,它们遍历整个列表以查找尾部:
> lists:last([1,2,3]).
3
> lists:droplast([1,2,3]).
[1,2]
如果您要使用长列表执行此操作,您可能希望编写一个仅遍历列表一次但返回新列表和最后一个元素的函数。 source code for lists:last
and lists:droplast
可以作为灵感。