erlang中的球拍ormap

时间:2011-11-03 23:29:07

标签: erlang racket

有没有更好的方法在Erlang中实现Racket的ormap而不是:

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

1 个答案:

答案 0 :(得分:2)

对我来说很好看。我不确定Erlang在优化这些方面有多聪明,但您可能希望将非错误模式匹配实际绑定到变量,并避免重新计算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}

应该有用。