在erlang中使用fun hd/1时出现异常错误

在erlang中使用fun hd/1时出现异常错误,erlang,Erlang,为了得到每个列表的标题,我做了以下工作: lists:map(fun hd/1, [[1, 2, 3], [4, 5, 6], [7, 8, 9]]). 结果是: ** exception error: undefined function erl_eval:hd/1 但如果使用其他方式: lists:map(fun(A) -> hd(A) end, [[1, 2, 3], [4, 5, 6], [7, 8, 9]]). 我得到了适当的结果!很抱歉提出了一个小问题,但您能告诉我为什么

为了得到每个列表的标题,我做了以下工作:

lists:map(fun hd/1, [[1, 2, 3], [4, 5, 6], [7, 8, 9]]).
结果是:

** exception error: undefined function erl_eval:hd/1
但如果使用其他方式:

lists:map(fun(A) -> hd(A) end, [[1, 2, 3], [4, 5, 6], [7, 8, 9]]).

我得到了适当的结果!很抱歉提出了一个小问题,但您能告诉我为什么它不能与
fun hd/1
一起使用吗?

使用
fun erlang:hd/1
作为语法。您需要在此处输入模块名称,才能使用
fun
语法。

谢谢,它成功了!但是你能告诉我为什么在erlang shell中我要添加“erlang:”,而在创建的模块中却没有必要添加“erlang:”?erlang shell使用erl_eval--对表达式进行求值。本模块专门处理内置函数。乐趣和BIF的结合并没有在那个模块中得到正确的实现。@chadwick有点像,但不是很像。当您使用语法
fun foo/1
时,意味着使用当前模块中的函数
foo/1
。外壳的当前模块为erl_eval。这甚至适用于像
hd/1
这样的BIF。如果要调用不在当前模块中的函数,则必须显式地给出该模块,在本例中为
erlang
。像
hd/1
这样的BIF仅在这种上下文中是特殊的,因为编译器知道它们在模块
erlang
中。