Explicação das listas: função fold
Aprendo cada vez mais a língua Erlang e recentemente enfrentei alguns problemas. eu leio sobrefoldl(Fun, Acc0, List) -> Acc1
função. Eu usei o tutorial learnyousomeerlang.com e havia um exemplo (o exemplo é sobre a Calculadora de notação polonesa reversa em Erlang):
%function that deletes all whitspaces and also execute
rpn(L) when is_list(L) ->
[Res] = lists:foldl(fun rpn/2, [], string:tokens(L," ")),
Res.
%function that converts string to integer or floating poitn value
read(N) ->
case string:to_float(N) of
%returning {error, no_float} where there is no float avaiable
{error,no_float} -> list_to_integer(N);
{F,_} -> F
end.
%rpn managing all actions
rpn("+",[N1,N2|S]) -> [N2+N1|S];
rpn("-", [N1,N2|S]) -> [N2-N1|S];
rpn("*", [N1,N2|S]) -> [N2*N1|S];
rpn("/", [N1,N2|S]) -> [N2/N1|S];
rpn("^", [N1,N2|S]) -> [math:pow(N2,N1)|S];
rpn("ln", [N|S]) -> [math:log(N)|S];
rpn("log10", [N|S]) -> [math:log10(N)|S];
rpn(X, Stack) -> [read(X) | Stack].
Tanto quanto eu entendolists:foldl
executarpn/2
em todos os elementos da lista. Mas isso é tanto quanto eu posso entender essa função. Eu li a documentação, mas isso não me ajuda muito. Alguém pode me explicar comolists:foldl
trabalho?