Il problema che sto cercando di risolvere gli stativuoto Mappa del modello corrisponde anche per non vuota Mappa
Scrivere una funzione map_search_pred (Mappa, Pred), che restituisce il primo elemento {chiave, valore} nella mappa per cui Pred (Key, Value) è vero.
Il mio tentativo sembra
map_search_pred(#{}, _) -> {};
map_search_pred(Map, Pred) ->
[H|_] = [{Key, Value} || {Key, Value} <- maps:to_list(Map), Pred(Key, Value) =:= true],
H.
Quando eseguo questo, vedo uscita come
1> lib_misc:map_search_pred(#{1 => 1, 2 => 3}, fun(X, Y) -> X =:= Y end).
{}
2> lib_misc:map_search_pred(#{1 => 1, 2 => 3}, fun(X, Y) -> X =:= Y end).
{}
3> maps:size(#{}).
0
4>
Come sto così sicuro? ho tirato fuori la prima clausola così sembra
map_search_pred(Map, Pred) ->
[H|_] = [{Key, Value} || {Key, Value} <- maps:to_list(Map), Pred(Key, Value) =:= true],
H.
ed eseguire nuovamente
1> lib_misc:map_search_pred(#{1 => 1, 2 => 3}, fun(X, Y) -> X =:= Y end).
{1,1}
2> lib_misc:map_search_pred(#{}, fun(X, Y) -> X =:= Y end).
** exception error: no match of right hand side value []
in function lib_misc:map_search_pred/2 (/Users/harith/code/IdeaProjects/others/erlang/programmingErlang/src/lib_misc.erl, line 42)
3>
Questo è molto meglio e soluzione elegante. Una cosa nuova che ho imparato è '[]' è 'lista vuota' ma' # {} 'non è' mappa vuota'. – daydreamer
@daydreamer Questo non è vero in generale, vale solo se quei letterali sono usati come pattern. – filmor