Explanation of lists:fold function

前端 未结 2 1545
北荒
北荒 2020-12-21 08:22

I learning more and more about Erlang language and have recently faced some problem. I read about foldl(Fun, Acc0, List) -> Acc1 function. I used learnyousom

2条回答
  •  执笔经年
    2020-12-21 08:34

    First, you have to remember haw works rpn. If you want to execute the following operation: 2 * (3 + 5), you will feed the function with the input: "3 5 + 2 *". This was useful at a time where you had 25 step to enter a program :o)

    the first function called simply split this character list into element:

    1> string:tokens("3 5 + 2 *"," ").
    ["3","5","+","2","*"]
    2>
    

    then it processes the lists:foldl/3. for each element of this list, rpn/2 is called with the head of the input list and the current accumulator, and return a new accumulator. lets go step by step:

    Step head  accumulator  matched rpn/2                           return value
    1    "3"   []           rpn(X, Stack) -> [read(X) | Stack].    [3]
    2    "5"   [3]          rpn(X, Stack) -> [read(X) | Stack].    [5,3]
    3    "+"   [5,3]        rpn("+", [N1,N2|S]) -> [N2+N1|S];      [8]
    4    "2"   [8]          rpn(X, Stack) -> [read(X) | Stack].    [2,8]
    5    "*"   [2,8]        rpn("*",[N1,N2|S]) -> [N2*N1|S];       [16]
    

    At the end, lists:foldl/3 returns [16] which matches to [R], and though rpn/1 returns R = 16

提交回复
热议问题