有没有更好的方法在Erlang中实现Racket的ormap而不是:
ormap(_, []) -> false;
ormap(Pred, [H|T]) ->
case Pred(H) of
false -> ormap(Pred, T);
_ -> {ok, Pred(H)}
end.
答案 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}
应该有用。