2017-02-06 10 views
2

演算子優先順位と関連

let (.||.) x y = (x || y) && not(x && y) 

ような

true .||. true 
true .||. false 

そのそれぞれfalsetrueを返却します。 Hansen & Rischelによると

は、&&オペレータはなぜ

true .||. true && false 
    true .||. false && true 

それぞれfalsetrueを返さない、したがって。あまりに||オペレータ(および.||.演算子よりも優先を持っている?結果は によって生成されるように表示されます(true .||. true) && falseの代わりにtrue .||. (true && false)

+3

関連:http://stackoverflow.com/questions/7656054/how-to-do-boolean-exclusive-or([IMO] better alternative '<>'とパフォーマンスの考慮事項)。 – CaringDev

+2

論理ゲートの交差配線は、何とか目を荒らします。どうして 'let(^^)= function true - > not | _ - > id'、それが優先順位を助けない場合でも? – kaefer

+0

ご意見ありがとうございました! – Worice

答えて

7

MSDNによれば、オペレータ.||.はパターン|op(すなわち、パイプで始まる先頭のドットを無視します。これは、テーブル内の演算子&&の2行下にあり、同じ行には&op<opが入ります。したがって実際にはより高く、&&よりも優先されます。

F# specは、セクション4.4.2と同じことを言います。テーブルは上下が逆さまです(最高から最低)。

あなたが読んでいる本にはコメントできません。便利です。

+0

お返事ありがとうございます。スポーツのためだけに、私は「システムは演算子の文字に基づいて宣言された演算子の優先順位と関連を判断しますが、。||の場合にはピリオドは影響を与えません。 |||は||と同じです。 "、p。 35.私はそれをエラーと考えるべきですか? – Worice

+0

いいえ、絶対に正しいです: '。|| .'の優先順位は' || .'と同じです。この本は正しい情報を提供します。間違っているのは、 '|| 'の優先順位が' || 'の優先順位と同じで、したがって' && 'の優先順位よりも低いというあなたの仮定です。 –

+0

入手しました。私は素朴に句読点を誤解しました。お待ちいただいてありがとうございます。 – Worice

関連する問題