Quando mapas de correspondência de padrões em Erlang, por que essa variável não está vinculada?
-module(count).
-export([count/1]).
count(L) when is_list(L) ->
do_count(L, #{});
count(_) ->
error(badarg).
do_count([], Acc) -> Acc;
do_count([H|T], #{}) -> do_count(T, #{ H => 1 });
do_count([H|T], Acc = #{ H := C }) -> do_count(T, Acc#{ H := C + 1});
do_count([H|T], Acc) -> do_count(T, Acc#{ H => 1 }).
Neste exemplo, a terceira cláusula em que a chave do mapa "H" existe e tem uma contagem associada a ela, não será compilada. O compilador reclama:
count.erl:11: variable 'H' is unbound
Por que H não está ligado?
Isso funciona a propósito:
do_count([], Acc) -> Acc;
do_count([H|T], Acc) -> do_count(T, maps:update_with(H, fun(C) -> C + 1 end, 1, Acc)).
Mas parece que a correspondência de padrõesdever, obrigação para trabalhar e não.