Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Erlang 列表:映射(列表:sum,[[1,2,3,4],[1,2,3])是不允许的。代替列表:sum必须有一个乐趣?_Erlang - Fatal编程技术网

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中的循环)