Erlang BIFs内部列表模块
受这个问题的启发,我很想知道Erlang BIFs内部列表模块,erlang,Erlang,受这个问题的启发,我很想知道lists:reverse/2是如何在lists.erl模块的源代码中实现的 我发现在列表.erl中没有列表:reverse/2的实现,但是有一个列表:reverse/1的实现使用了列表:reverse/2: reverse([] = L) -> L; reverse([_] = L) -> L; reverse([A, B]) -> [B, A]; reverse([A, B | L]) -> lists:re
lists:reverse/2
是如何在lists.erl
模块的源代码中实现的
我发现在列表.erl
中没有列表:reverse/2
的实现,但是有一个列表:reverse/1
的实现使用了列表:reverse/2
:
reverse([] = L) ->
L;
reverse([_] = L) ->
L;
reverse([A, B]) ->
[B, A];
reverse([A, B | L]) ->
lists:reverse(L, [B, A]).
在文件的顶部有一些行告诉我们列表:reverse/2
(和一些其他函数)是BIFs:
%%% BIFs
-export([keyfind/3, keymember/3, keysearch/3, member/2, reverse/2]).
...
%% Shadowed by erl_bif_types: lists:reverse/2
-spec reverse(List1, Tail) -> List2 when
List1 :: [T],
Tail :: term(),
List2 :: [T],
T :: term().
reverse(_, _) ->
erlang:nif_error(undef).
问题:首先,我找不到这些BIF的实际实现。我在哪里可以找到它们?第二,如果有人也知道解释为什么它是这样组织的?BIF是在中实现的
列表。为提高效率和性能,大量使用的标准模块(如列表
)的一部分作为BIF实施。列表
BIF在中实施。为提高效率和性能,大量使用的标准模块(如列表
)的一部分被实现为BIF