выглядит довольно хорошо для меня.Я не уверен, насколько умным Эрлангом является оптимизация этих вещей, но вы, возможно, захотите связать не-ложное сопоставление с переменной и избежать повторного вычисления Pred(H)
.
ormap(_, []) -> false;
ormap(Pred, [H|T]) ->
case Pred(H) of
false -> ormap(Pred, T);
V -> {ok, V}
end.
Версия Racket не включает символ ok
, но это похоже на Erlangy, поэтому я не вижу в этом ничего плохого.Вы также можете ожидать, что Pred вернет прикрепленный символ ok
для не ложного случая, в этом случае:
V -> V
или
{ok, V} -> {ok, V}
должно работать.