list:map(lists:sum,[[1,2,3,4],[1,2,3])是不允许的。而不是list:sum一定有乐趣吗?

时间:2018-12-30 15:55:31

标签: erlang

为什么不允许以下内容:

156> lists:map(lists:sum,[[1,2,3,4],[1,2,3]).                       
* 1: illegal expression

,当我在lists:sum处玩耍时,它是允许的:

162> lists:map(fun (L)->lists:sum(L)end,[[1,2,3,4],[1,2,3]]).
[10,6]

2 个答案:

答案 0 :(得分:4)

@spkhaira answer是正确的,此语法决定背后的原因是在Erlang函数和变量占用不同的名称空间中,它类似于Lisps2。这主要是由于两个原因:

  • Erlang是动态键入的语言
  • Erlang中的函数由2个值定义:名称和参数(参数数量)

使用这2个属性,我们无法推断出要调用的函数的“版本”,这就是为什么需要使用/N的原因。 fun前缀呢?解析器仅需要区分用于定义Arity的erlang:'/'(又名除法)和/N

答案 1 :(得分:3)

尝试一下-

lists:map(fun lists:sum/1,[[1,2,3,4],[1,2,3]]).