Erlang 列表:映射(列表:sum,[[1,2,3,4],[1,2,3])是不允许的。代替列表:sum必须有一个乐趣?
为什么不允许出现以下情况:Erlang 列表:映射(列表:sum,[[1,2,3,4],[1,2,3])是不允许的。代替列表:sum必须有一个乐趣?,erlang,Erlang,为什么不允许出现以下情况: 156> lists:map(lists:sum,[[1,2,3,4],[1,2,3]). * 1: illegal expression ,当我在列表:sum周围开玩笑时,允许: 162> lists:map(fun (L)->lists:sum(L)end,[[1,2,3,4],[1,2,3]]). [10,6] 试试这个- lists:map(fun lists:sum/1,[[1,2,3,4]
156> lists:map(lists:sum,[[1,2,3,4],[1,2,3]).
* 1: illegal expression
,当我在列表:sum
周围开玩笑时,允许:
162> lists:map(fun (L)->lists:sum(L)end,[[1,2,3,4],[1,2,3]]).
[10,6]
试试这个-
lists:map(fun lists:sum/1,[[1,2,3,4],[1,2,3]]).
是正确的,这个语法决策背后的原因是,在Erlang函数和变量占用不同的名称空间时,它与Lisps 2类似。这主要是因为两个原因:
- Erlang是动态类型化语言
- Erlang中的函数由两个值定义:名称和arity(参数数量)
使用这两个属性,我们无法推断您要调用的函数的“版本”,这就是为什么您需要使用
/N
。那么fun
前缀呢?解析器只需要区分erlang:'/'
(也称为division)和用于定义算术的/N
。这也是我发现的。为什么一定要有乐趣?这是我的问题。这就是它在函数语言(如Elixir)中的工作原理。您需要传递一个应用于列表中每个元素的函数。在其他语言中,您可以使用块(即Ruby)或实际迭代语法(考虑Java中的循环)