二郎:头|从尾巴
Erlang: head | tail from the end
我刚刚开始使用 Erlang(尽管有一些 lisp 背景)并且对列表上的模式匹配有疑问。
如果我说
[Head | Tail] = [1, 2, 3].
然后我得到
Head = 1
Tail = [2, 3]
如果我想从另一端做同样的事情而不颠倒列表两次,是否有一些简洁的模式?我希望能够这样说:
[All_but | last] = [1, 2, 3].
并得到:
All_but = [1, 2]
last = 3
谢谢。
PS:我知道我的例子是不正确的行为。
对此没有简洁的模式。您可以使用函数 lists:last
和 lists:droplast
,它们遍历整个列表以找到尾部:
> lists:last([1,2,3]).
3
> lists:droplast([1,2,3]).
[1,2]
如果您要对长列表执行此操作,您可能希望编写一个只遍历列表一次但 returns 遍历新列表和最后一个元素的函数。 source code for lists:last
and lists:droplast
可以作为灵感。
我刚刚开始使用 Erlang(尽管有一些 lisp 背景)并且对列表上的模式匹配有疑问。
如果我说
[Head | Tail] = [1, 2, 3].
然后我得到
Head = 1
Tail = [2, 3]
如果我想从另一端做同样的事情而不颠倒列表两次,是否有一些简洁的模式?我希望能够这样说:
[All_but | last] = [1, 2, 3].
并得到:
All_but = [1, 2]
last = 3
谢谢。
PS:我知道我的例子是不正确的行为。
对此没有简洁的模式。您可以使用函数 lists:last
和 lists:droplast
,它们遍历整个列表以找到尾部:
> lists:last([1,2,3]).
3
> lists:droplast([1,2,3]).
[1,2]
如果您要对长列表执行此操作,您可能希望编写一个只遍历列表一次但 returns 遍历新列表和最后一个元素的函数。 source code for lists:last
and lists:droplast
可以作为灵感。