Как уже указывалось, Lua использует ключевое слово not
для логической инверсии, а не оператор !
. Выложенный вами код выглядит как gLua: вариант Lua, основанный на Lua 5.1 и разработанный для Garry's Mod. Среди отличий от чистого Lua 5.1 он реализует множество операторов в стиле C, как указано здесь здесь . Попытка запустить gLua в обычной среде Lua не будет работать, так как базовая Lua не поддерживает эти операторы, а некоторые встроенные функции Lua ведут себя по-разному в gLua.
РЕДАКТИРОВАТЬ: Если выполняется в среде gLua, причиной проблемы, вероятно, является использование entity.GetrHealth
: это не базовая функция, вы намеревались entity.GetHealth
?
Точное значение пустого дерева, конечно же, зависит от вашей реализации, равно как и значение слова «действительный», но в целом я бы сказал «да» на оба вопроса. Пустое дерево представляет случай, когда набор сущностей, в который вы вставили, пуст, а единственный узел - случай, когда набор содержит одну сущность.
Один узел без дочерних элементов, безусловно, действителен и согласно Структура двоичного дерева :
(изменяемое) двоичное дерево, BiTree, может быть в пустом состоянии или не пустым состояние:
- Когда оно пустое, оно не содержит данных.
- Когда он не пустой, он содержит объект данных, называемый корневым элементом, и 2 различных объекта BiTree, называемых левым поддеревом и правым поддеревом.
Для полноты, эта запись в Википедии является довольно полезное краткое изложение терминологии и тому подобное.
Допустимо ли пустое дерево (нулевое)?
Если его пусто, дерева нет. Следовательно, вопрос о действительности не возникает.
Является ли действительным корневой узел без дочерних элементов?
Да. Это тройник с одним элементом.
Я думаю, что вы смешиваете яблоки и апельсины:
null
- это значение в некоторых языках программирования, и оно связано с конкретным представлением вашей реализации структуры данных Теперь дерево - это упорядоченный набор: ни больше, ни меньше. Конечно, набор может быть пустым! Это означает, что в вашей реализации что-то похожее на:
MyTree tree = null
представляет пустое дерево? Ну, это зависит от вашей модели.
Например, вы можете подумать, что пустое поддерево должно быть представлено узлом без значения и с аннулированными ссылками на листья: в этой модели нулевой указатель
не имеет смысла с логической точки зрения. Но это только один подход! Подход, основанный на дозорных, - это удовольствие для программирования, но он требует большого объема памяти: тогда вы можете моделировать пустые узлы только с нулем. В этом случае указатель null
может быть пустым деревом.