-1
私自身がfilter
関数を書こうとしていて、エラーが発生しました。コード:ガードを使用したカスタム `filter`機能
filter_acc(_, [], Result) -> Result;
filter_acc(F, [H|T], Result) when F(H) =:= true -> filter_acc(F, T, [H | Result]).
filter(F, L) -> filter_acc(F, L, []).
エラー:
my_functions.erl:11: illegal guard expression
error
機能は、ガード式の一部として評価することができませんか?もしそうでなければ、これはどうやって行なわれますか?
パフォーマンスを保証するために、短いBIFおよび比較のわずかなセットのみがガードで許可されます(ただし、リストが巨大な場合は長さが非常に長い場合があります)。 – Pascal
@Pascalパフォーマンスだけではありません。 'if'ブロックのガードと条件文は、副作用を持つコードを実行できないため、副作用がないことが分かっている関数を制限します。 – RichN