Ракетка или карта в эрланге - PullRequest
1 голос
/ 04 ноября 2011

Есть ли лучший способ реализовать Racket's ormap в Erlang, чем:

ormap(_, []) -> false;
ormap(Pred, [H|T]) -> 
    case Pred(H) of 
        false -> ormap(Pred, T);
        _ -> {ok, Pred(H)}
    end.

1 Ответ

2 голосов
/ 04 ноября 2011

выглядит довольно хорошо для меня.Я не уверен, насколько умным Эрлангом является оптимизация этих вещей, но вы, возможно, захотите связать не-ложное сопоставление с переменной и избежать повторного вычисления 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}

должно работать.

...