В Excel есть пустая ячейка, которая имеет некоторые интересные свойства, когда дело доходит до вычислений:
Ниже мы предполагаем, что ячейка A1 пуста.
=A1=A1
.''
, 0
и FALSE
: =A1 = ""
, =A1=0
, =A1=FALSE
.=A1+A1
(0), =-A1
(0), =A1&A1
("").Я полагаю, что ближайший элемент, который я нашел, — это функция bool
в python, которая охватывает первые два случая выше:
bool(None) == bool(None)
bool(None) == bool(0)
, bool(None) == bool('')
, bool(None) == bool(False)
Но это не распространяется на третий случай, когда он неявно приводится к ожидаемому типу. Есть ли что-нибудь в языке, который покрывает это?
Вот видео, показывающее некоторые свойства: https://gyazo.com/b23989ba1fd28500aff32a6b6cb6dca5.
@rici, что может быть примером такого правила принуждения Awk? В основном с проверкой на равенство или как?
Да, я имел в виду сравнения, а не просто равенство. В Awk все операторы сравнения используют одни и те же правила приведения. Но это не контекстуально, поэтому я не уверен, что это действительно имеет отношение к вашему вопросу.
Интересный. Что именно вы ищете? Любая функция на любом языке, которая следует логике? Какова конечная цель?
Я дал ответ, основанный на трех утверждениях, но затем, читая пример, который вы привели для Python, кажется, что вы подразумеваете больше, чем вы спрашиваете, с тремя утверждениями, в частности, что язык статически типизирован, если это так, пожалуйста, укажите это, и я удалите мой ответ.
data type
, а объект с несколькими параметрами.date
, currency
или Boolean
.Таким образом, самая близкая к пустой ячейке Excel вещь на самом деле «нулевая» в большинстве языков программирования. пустая ячейка - это состояние, а не тип данных.
Правильно ли будет сказать, что в большинстве слабо типизированных языков он равен нулю? Как и в строго типизированном языке, значение null по-прежнему имеет определенный тип.
Да, в большинстве слабо типизированных языков он равен нулю.
@user16930239 user16930239 конечно, но обычно null
выдает null
по сравнению с чем-либо еще (я больше думаю о sql), или вы думаете о конкретном языке, который использует null
иначе, чем этот?
@ David542, в таком случае, интересно, Void
может быть лучшая аналогия?
@Fogmeister Я вижу, например, на каком языке javascript? с? и т. д.
@ Дэвид542 Я не уверен. Просто интересно обсуждение. 😅
Есть ли что-нибудь в языке, который покрывает это?
Короткий ответ:
Языки, которые поддерживают синтаксическую унификацию, например. Пролог, журнал данных, программирование набора ответов, ... .
Эти языки программирования обычно являются языками логического программирования.
Вот демонстрации вашего списка с использованием SWI-Prolog
Примечание: в Прологе = это объединение, а не сравнение ==. В некоторых ситуациях, если вы думаете о переменной как об именованном указателе, а об унификации как об установлении указателей равными, это имеет смысл, но эта аналогия работает только в определенных случаях, вас предупредили.
?- A = B.
A = B.
Теперь, если A привязано к значению, то B также связано, потому что они унифицированы.
?- A = B,A=1.
A = B, B = 1.
Я буду считать, что это означает, что пустая ячейка имеет примитивный тип данных со значением по умолчанию этого типа.
Поскольку Пролог не является строго типизированным , переменная не имеет типа, пока значение не привязано к переменной, подумайте о Python с утиной типизацией. Даже в этом случае концепция конкретного типа может оказаться не такой, как вы ожидаете.
Однако, когда второе утверждение рассматривается с третьим утверждением
затем, как уже отмечалось, переменная Prolog (пустая ячейка Excel) приобретает тип при связывании.
?- (var(B)->write('B is variable');write('B is not variable')),nl,(integer(B)->write('B is integer');write('B is not integer')),nl,A is 2,(integer(A)->write('A is integer');write('A is not integer')),nl,A=B,(integer(B)->write('B is integer');write('B is not integer')).
B is variable
B is not integer
A is integer
B is integer
B = A, A = 2.
Это отдаленно похоже на идиосинкразические правила принуждения Awk, которые являются известным источником незаметных ошибок. (Иногда даже создается такими людьми, как я, с давней любовью к Awk.)