Проверил «в лоб», при всех ли значениях параметров совпадают 2 логических выражения, со скобками и без. Результат немного странный:
for i1, x in pairs({true, false}) do
for i2, y in pairs({true, false}) do
for i3, z in pairs({true, false}) do
print(x, y, z,
(x and y and (not z)) or ((not y) and x), (x and y and not z or not y and x),
(x and y and (not z)) or ((not y) and x) == (x and y and not z or not y and x),
(x and y and (not z)) or ((not y) and x) ~= (x and y and not z or not y and x)
)
end
end
end
true true true false false true false
true true false true true true true
true false true true true true false
true false false true true true false
false true true false false true false
false true false false false true false
false false true false false true false
false false false false false true false
Левые 3 колонки — значения x, y и z; следующие 2 — значения одного и того же выражения со скобками и без; 2 последние — результаты их сравнения операциями == и ~=.
Вопрос: почему во 2-й сверху строке true ~= true возвращает true?
Ubuntu, Lua 5.2.4.