【发布时间】:2016-06-13 04:55:03
【问题描述】:
受this问题的启发,我很想知道lists:reverse/2是如何在lists.erl模块内的源代码中实现的。
我发现lists.erl里面没有lists:reverse/2的实现,但是lists:reverse/1有一个使用lists:reverse/2的实现:
reverse([] = L) ->
L;
reverse([_] = L) ->
L;
reverse([A, B]) ->
[B, A];
reverse([A, B | L]) ->
lists:reverse(L, [B, A]).
在文件的顶部有几行表明lists:reverse/2(和其他一些函数)是 BIF:
%%% 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 的实际实现。我在哪里可以找到它们?其次,如果有人也知道解释为什么它是这样组织的?
【问题讨论】:
标签: erlang