Объяснение списков: функция сгиба

Я все больше и больше изучаю язык Erlang и недавно столкнулся с некоторой проблемой. Я читаю оfoldl(Fun, Acc0, List) -> Acc1 функция. Я использовал обучающий курс learnyousomeerlang.com, и был пример (пример о калькуляторе обратной польской нотации в 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].

Насколько я понимаюlists:foldl исполняетrpn/2 на каждом элементе в списке. Но это насколько я могу понять эту функцию. Я читаю документацию, но она мне мало помогает. Может кто-нибудь объяснить мне, какlists:foldl работает?

Ответы на вопрос(2)

Ваш ответ на вопрос