首页 > 解决方案 > 列表:地图(列表:总和,[[1,2,3,4],[1,2,3]) 是不允许的。代替 list:sum 一定有乐趣?

问题描述

为什么不允许以下行为:

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]

?

标签: erlang

解决方案


@spkhaira 答案是正确的,这个语法决定背后的原因是在 Erlang 函数和变量占用不同的命名空间,它类似于 Lisps 2。这主要是因为两个原因:

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

使用这两个属性,我们无法推断出您要调用的函数的“版本”,这就是您需要使用/N. fun前缀呢?解析器只需要区分erlang:'/'(又名除法)和/N用于定义数量的。


推荐阅读