ガードの一部が である場合member(E, L)
、Erlang で if ステートメントを書く最も簡単な方法は何ですか? 単純なアプローチは次のとおりです。E
L
if
... andalso member(E,L) -> ...
end
しかし、私が正しく理解していれば、member
はガード式ではないため、機能しません。どの方法が機能しますか?
ガードの一部が である場合member(E, L)
、Erlang で if ステートメントを書く最も簡単な方法は何ですか? 単純なアプローチは次のとおりです。E
L
if
... andalso member(E,L) -> ...
end
しかし、私が正しく理解していれば、member
はガード式ではないため、機能しません。どの方法が機能しますか?
あなたが言うように、メンバー機能は有効なガードではありません。代わりに、ケース パターンの使用を検討できますか? case 式に他の if 句を含めることもできます。
case {member(E,L),Expr} of
{true,true} -> do(), is_member;
{true,false} -> is_member;
{false,_} -> no_member
end
Erlangのガードでリストメンバーシップをテストすることはできません。あなたはこれをしなければなりません:
f(E, L) ->
case lists:member(E, L) of
true -> ...;
false -> ...
end.
最も簡単なのは、ガードをパターン マッチングの一部、つまりパターン自体では表現できない、または表現しにくい部分と見なすことです。したがって、ガードは一連のガード テストであり、ブール式ではありません。元のガード構文では違いが簡単にわかりましたが、現在はブール式のように見えますが、そうではありません。