Подсчет в Эрланге (как мне увеличить переменную?)

Я выяснил циклы в стиле Эрланга: хвостовая рекурсия с функциями, которые принимают все «переменные, которые не меняются»:

%% does something, 80 bytes at a time
loop(Line, File) -> loop(Line, File, 0).
loop(Line, File, Count) -> 
    do_something(Line, Count),
    case file:read(File, 80) of
        {ok, Line2} -> loop(Line2, File, Count + 1);
        eof -> file:close(File);
        {error, Reason} -> {error, Reason}
    end.

Но как лучше всего увеличить счетчик в Эрланге? В большинстве языков программирования подсчет вещей происходит путем увеличения переменной (т. Е.count += 1;). Переменные Эрланга не меняются, поэтому мы должны быть креативными. К счастью, у нас есть варианты ...

Мы можем передавать переменную Counter с нашими функциями и увеличивать ее при каждом вызове функции. Мы можем использовать словарь процессов для хранения счетчика, иget а такжеput увеличить его. Мы можем использовать ETS, локальное хранилище данных для процессов. Мы можем использовать встречный процесс (!!!):

loop(Count) ->                            
    receive                                   
        { incr } -> 
            loop(Count + 1);              
        { report, To } ->                     
            To ! { count, Count },            
            loop(Count)                           
    end.                                      

incr(Counter) ->
    Counter ! { incr }.

get_count(Counter) ->    
    Counter ! { report, self() },
    receive
        { count, Count } -> Count
    end.

Я уверен, что есть и другие способы, в зависимости от объема. Что считается «лучшей практикой» для приращения переменной в Erlang?

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

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