Problem usiłuję rozwiązać stanyEmpty Mapa wzorzec pasuje nawet dla niepustego mapą
Napisz funkcję map_search_pred (Map, Pred), która zwraca pierwszy elementu {key, value} na mapie dla których Pred (klucz, wartość) jest prawdziwe.
Moja próba wygląda
map_search_pred(#{}, _) -> {};
map_search_pred(Map, Pred) ->
[H|_] = [{Key, Value} || {Key, Value} <- maps:to_list(Map), Pred(Key, Value) =:= true],
H.
Gdy uruchomię to widzę wyjścia jak
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>
Jak jestem taki pewien? Wyciągnąłem pierwszy klauzuli tak wygląda
map_search_pred(Map, Pred) ->
[H|_] = [{Key, Value} || {Key, Value} <- maps:to_list(Map), Pred(Key, Value) =:= true],
H.
i uruchom ponownie
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>
Jest to o wiele lepiej i eleganckie rozwiązanie. Nową rzeczą, której się nauczyłem, jest '[]' jest 'pustą listą', ale' # {} 'nie jest' pustą mapą'. – daydreamer
@daydreamer To nie jest prawda w ogóle, zachowuje się tylko wtedy, gdy te literały są używane jako wzorce. – filmor