LINUX.ORG.RU

Как это работает?

 


0

1

Проверил «в лоб», при всех ли значениях параметров совпадают 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.

★★★★★

Со скобками беда.

> (x and y and (not z)) or ((not y) and x) ~= (x and y and not z or not y and x)
true
> (x and y and (not z))
true
> ((not y) and x) ~= (x and y and not z or not y and x)
true
anonymous
()
Ответ на: комментарий от anonymous

Операция «~=» имеет приоритете выше чем «or». Ага?

anonymous
()
Ответ на: комментарий от anonymous

Спасибо.

Вот что недосып делает.

question4 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.