6

ガードの一部が である場合member(E, L)、Erlang で if ステートメントを書く最も簡単な方法は何ですか? 単純なアプローチは次のとおりです。EL

if 
  ... andalso member(E,L) -> ...
end

しかし、私が正しく理解していれば、memberはガード式ではないため、機能しません。どの方法が機能しますか?

4

3 に答える 3

13

あなたが言うように、メンバー機能は有効なガードではありません。代わりに、ケース パターンの使用を検討できますか? case 式に他の if 句を含めることもできます。

case {member(E,L),Expr} of
  {true,true} -> do(), is_member;
  {true,false} -> is_member;
  {false,_} -> no_member
end
于 2011-08-03T14:13:27.583 に答える
6

Erlangのガードでリストメンバーシップをテストすることはできません。あなたはこれをしなければなりません:

f(E, L) ->
    case lists:member(E, L) of
        true  -> ...;
        false -> ...
    end.
于 2011-08-03T14:11:10.143 に答える
2

最も簡単なのは、ガードをパターン マッチングの一部、つまりパターン自体では表現できない、または表現しにくい部分と見なすことです。したがって、ガードは一連のガード テストであり、ブール式ではありません。元のガード構文では違いが簡単にわかりましたが、現在はブール式のように見えますが、そうではありません。

于 2011-08-07T15:43:31.077 に答える