Erklärung der Listen: Fold-Funktion
Ich lerne immer mehr über Erlang und habe in letzter Zeit ein Problem. Ich lese überfoldl(Fun, Acc0, List) -> Acc1
Funktion. Ich habe das Tutorial learnyousomeerlang.com verwendet und es gab ein Beispiel (Beispiel zum Umgekehrten Polnischen Notationsrechner in 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].
So weit ich das verstehelists:foldl
führt @ arpn/2
auf jedem Element in der Liste. Dies ist aber soweit ich diese Funktion verstehen kann. Ich habe die Dokumentation gelesen, aber es hilft mir nicht viel. Kann mir jemand erklären wielists:foldl
funktioniert?