ガードの一部がmember(E, L)
のErlangでif文を書く最も簡単な方法は、E
がリストL
のメンバーであるかどうかをテストすることですか?単純なアプローチがある:Erlangガードのメンバシップを確認する
if
... andalso member(E,L) -> ...
end
しかし、私は正しく理解していれば、becuase動作しないで、member
はガード式ではありません。どちらの方法でうまくいくのですか?
ガードの一部がmember(E, L)
のErlangでif文を書く最も簡単な方法は、E
がリストL
のメンバーであるかどうかをテストすることですか?単純なアプローチがある:Erlangガードのメンバシップを確認する
if
... andalso member(E,L) -> ...
end
しかし、私は正しく理解していれば、becuase動作しないで、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.
最も簡単なものは、パターンマッチングの一部としてガードを検討し、パターン自体では発現しないか、またはが困難な部分です。したがって、ガードは、ガードテストのシーケンスであり、ブール式ではありません。元のガードシンタックスは違いを見やすくしましたが、今はブール式のように見えますが、そうではありません。
ニース。私はブール値をcase節として使うことを避けたいと考えましたが、少なくともif文の中にcase文を入れ子にする必要はありません。 –
ケースステートメントでブール値を使用することはかなり一般的です。おそらく、ifの使用よりも一般的です。 –