2017-02-06 4 views
2

Я определили оператор XOR:Операторы старшинство и ассоциации

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

Такое, что

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

возвратившегося false и true соответственно.

Согласно Hansen & Rischel, оператор && имеет более высокий приоритет над || оператора (и оператора .||. тоже. Поэтому, почему

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

действительно возвращают false и true соответственно? Результаты по-видимому, производится (true .||. true) && false вместо ожидаемых true .||. (true && false).

+3

См. Также http://stackoverflow.com/questions/7656054/how-to-do-boolean-exclusive-or (для [ИМО] лучше альтернативы '<> и соображений производительности). – CaringDev

+2

Это перекрестье логических ворот каким-то образом решает глаза. Почему бы не 'let (^^) = function true -> not | _ -> id', даже если это не помогает с приоритетом? – kaefer

+0

Спасибо, ребята, за ваши предложения! – Worice

ответ

7

Согласно MSDN, оператор .||. будет подпадают под шаблон |op (т.е. игнорируя ведущую точку, начиная с трубы), которая находится в двух строках ниже оператора && в таблице, в той же строке с &op и <op и другими. Так что на самом деле он имеет выше приоритет, чем &&.

F# spec говорит то же самое в разделе 4.4.2, там находится только таблица вверх (от наивысшего до самого низкого).

Нельзя комментировать книгу, которую вы читаете, не имеет ее под рукой.

+0

Спасибо, ответ. Как раз для спорта, я цитирую: «Система определяет приоритет и ассоциацию объявленных операторов на основе символов операторов. В случае с периодами не влияет на это, поэтому приоритет и связь . ||. будет тем же самым из || ", с. 35. Должен ли я считать это ошибкой? – Worice

+0

Нет, это абсолютно правильно: приоритет '. || .' такой же, как' || .'. Книга дает вам правильную информацию. Неправильно ваше предположение о том, что приоритет '|| .' совпадает с приоритетом' || 'и, следовательно, ниже приоритета' && '. –

+0

Получил. Я наивно неверно истолковал пунктуацию. Спасибо за терпеливость. – Worice

Смежные вопросы