Il codice è qui sotto:modello illegale in mappa di Erlang
-module(map_demo).
-export([count_characters/1]).
count_characters(Str) ->
count_characters(Str, #{}).
count_characters([H|T], #{ H => N } = X) ->
count_characters(T, X#{ H := N+1 });
count_characters([H|T], X) ->
count_characters(T, X#{ H => 1});
count_characters([], X) ->
X.
durante la compilazione del codice nel guscio Erlang, ha segnalato i seguenti errori:
1> c(map_demo).
map_demo.erl:7: illegal pattern
map_demo.erl:8: variable 'N' is unbound
map_demo.erl:10: illegal use of variable 'H' in map
map_demo.erl:7: Warning: variable 'H' is unused
error
Sono nuovo in Erlang, e proprio non riesco a trovare nulla di sbagliato da solo. Come correggerlo?
La cosa più vicina che riesco a trovare è che si tratta di un "bug noto". Queste persone erlang sono serie? Questo è un bug così grande in quel caso! Penso che questo sia qualcosa che hai preso da "Programming Erlang" di Joe Armstrong stesso, e sono scioccato dal fatto che questo non funzioni! –
A partire da Erlang/OTP 18.0 questo codice genera l'errore "solo" per la riga 7, 8 perché le variabili associate sono legali da utilizzare nelle mappe: ________________________________________________________________________________ 1> 'K = thecake, # {K => isalie} .' _______________________________________________' # { thecake => isalie} ' –
esegue la versione 20, e questo è ANCORA un errore ?! Forse cercherò un po 'di più prima di arrabbiarmi, ma ... https://stackoverflow.com/questions/44247735/map-pattern-matching-in-erlang-unexpected-error-unbound – alexakarpov