如何在Erlang中使用整列表函数参数

如何在Erlang中使用整列表函数参数,erlang,Erlang,我能理解我在文档中读到的大多数[H|T]示例。我通常的意思是我想使用列表中的H或T部分。如果我想用整个列表来代替呢。示例代码: -module(module_variable). -export([main/0, list_suffix/1]). variable() -> [1, 2, 3, 4, 5]. list_suffix([_H|T]) -> lists:suffix(variable, T). main() -> io:fwri

我能理解我在文档中读到的大多数
[H|T]
示例。我通常的意思是我想使用列表中的
H
T
部分。如果我想用整个列表来代替呢。示例代码:

-module(module_variable).
-export([main/0, list_suffix/1]).

variable() -> [1, 2, 3, 4, 5].

list_suffix([_H|T]) ->
        lists:suffix(variable, T).

main() ->
        io:fwrite("~p~n", [list_suffix([4, 5])]).
我得到的错误是:

6> module_variable:list_suffix([1,[4, 5]]).
** exception error: bad argument
     in function  length/1
        called as length(variable)
     in call from lists:suffix/2 (lists.erl, line 205)

谢谢你的帮助

您可以使用列表前面的多个值。不能在中间跳过任意数量的值。因为在代码中,您不知道要提前匹配头部的多少元素,所以模式匹配无法为您做到这一点

一些例子:

设置:

1> A = [1, 2, 3, 4, 5].
[1,2,3,4,5]
匹配列表的前2个元素

2> [1, 2 | _ ] = A.
[1,2,3,4,5]
% Can pattern match to extract values
3> [B, C | _ ] = A.    
[1,2,3,4,5]
4> B.
1
5> C.
2
可以匹配一些常量值,也可以指定

6> [1, 2, D | _ ] = A.
[1,2,3,4,5]
可以匹配整个列表

7> [1, 2, 3, 4, 5] = A. 
[1,2,3,4,5]
% Can't skip over elements in the middle
8> [1, 2| [4, 5]] = A. 
** exception error: no match of right hand side value [1,2,3,4,5]
% This works, though not useful most of the time:
9> [1, 2, 3 | [4, 5]] = A.
[1,2,3,4,5]
% Can assign every element
10> [B, C, D, E, F] = A.
[1,2,3,4,5]
11> E.
4
12> F.
5
% If you don't use a pipe, the length has to match exactly
13> [B, C, D, E] = A.   
** exception error: no match of right hand side value [1,2,3,4,5]

您只需编写
L
另一件事-在您的代码中
变量
是一个原子而不是函数调用
变量/0
如果这样做,我会得到如下错误:
8>模块变量:列表后缀([1,[4,5]]).*异常错误:函数length/1中的参数不正确,在lists:suffix/2(lists.erl,第205行)的调用中被称为length(variable)
是的
变量是问题所在,如果由于某种原因erlang不允许您匹配整个列表,您始终可以从H和T变量构造函数体中的整个列表。你会怎么做<代码>[H|T]