Внедрение sets. Было бы очень аккуратно использовать операторы порядка для тестов включения. a < b
будет означать, что «a
является надлежащим подмножеством b
». a = b
будет mena "a
и b
равны". a <= b
будет означать, что «a
является подмножеством b
» (не обязательно правильный, поэтому они могут быть равны).
Теперь рассмотрим
a = Set:new{1, 2, 3}
b = Set:new{"a", "b", "c"}
Теперь ни a <= b
, ни a < b
верно. Почему это? Поскольку отношение подмножества определяет только partial order. Логическое предположение, что a <= b
эквивалентно not(a > b)
, действителен только для полностью отношений, которые определяют total order.
(пример вдохновил "Программирование в Lua, третье издание" стр 131.)
EDIT:
Для решения вашего обновления. Почему у Lua нет меток для ~=
, >
и >=
в отношении внедрения DSL?
Даже на частично упорядоченных множеств, следующие всегда верно:
a > b <==> b < a
a >= b <==> b <= a
a ~= b <==> not (b == a)
Определение различных значений для <
и >
(для коммутируемой порядка за исключением) сделает ваш код действительно сбивает с толку, не думаете ли вы? То же самое, если два a
и b
могут быть равными и неравными (или ни один). Полагаю, именно поэтому Lua делает предположение, что он всегда может реализовать эти три оператора в терминах других.
Если вы определяете 'а <= b' означает, что' a' является подмножеством '' b', не (Ь <а) 'не означает' а <= b'. – Blender
@Blender, если '<=' является "подмножеством", что такое '<'? – Abyx
Это правильное подмножество ('a' не может быть равно' b'). – Blender