В алгебре, если я сделаю выражение x + y = 3, переменные, которые я использовал, будут содержать значения либо 2 и 1, либо 1 и 2. Я знаю, что присваивание в программировании - это не одно и то же, но мне стало интересно. Если бы я хотел представить значение, скажем, квантово странной частицы, я бы хотел, чтобы моя переменная имела два значения одновременно и чтобы она разрешалась в одно или другое позже. А может я просто мечтаю?
Можно ли сказать что-то вроде i = 3 or 2;
?
Ха, да! Ну, я почти ничего не знаю ни о какой математической фигне, которую вы видите ... Так что иногда я путаю свою правду с моей ложью! Спасибо хоть!
Вы можете использовать структуру и обрабатывать операции вручную. В противном случае ни одна переменная не может иметь только 1 значение за раз.
Вы не можете сделать это с собственными типами, но ничто не мешает вам создать переменный объект (при условии, что вы используете объектно-ориентированный язык), который имеет диапазон значений или даже функцию плотности вероятности, а не фактическое значение.
Вам также потребуется определить все математические операторы между вашими переменными и вашими переменными и собственными скалярами. То же самое и с операторами равенства и присваивания.
массивы numpy делают нечто подобное для векторов и матриц.
Я не уверен, почему вы сделали комментарий об использовании объектно-ориентированного языка. Можно было бы создать библиотеку практически на любом языке для обработки неопределенных типов переменных.
Переменная - это не что иное, как адрес в памяти. Это означает, что переменная описывает ровно одно место в памяти (длина зависит от типа). Итак, пока у нас нет «квантовой памяти» (и у нас ее нет, и не похоже, что она будет у нас в ближайшем будущем), ответ - НЕТ. Если вы хотите запрограммировать и смоделировать это поведение, вы можете использовать массив (с длиной, равной количеству макс. Множественных значений). С этим увеличивается время выполнения, поэтому вычисления должны выполняться для каждого из значений (например, x + y, должны вычисляться с двумя разными значениями x1 + y1, x2 + y2, x1 + y2 и x2 + y1).
В Perl это возможно. Если вы используете Скаляр :: Утилита, вы можете сделать так, чтобы переменная принимала 2 значения. Один, если он используется в строковом контексте, а другой, если он используется в числовом контексте.
Кажется, вы спрашиваете, как реализовать систему Нечеткая логика. Они существуют уже некоторое время, и вы, несомненно, можете легко подобрать библиотеку для распространенных языков программирования.
Дэмиен Конвейс Quantum :: Суперпозиции могут делать то, что вы хотите,
https://metacpan.org/pod/Quantum::Superpositions
Однако вам может понадобиться ваша трубка для крэка.
ха-ха-ха, это то, о чем я говорю.
Это одна из функций, запланированных для Perl 6 (переходы), с синтаксисом, который должен выглядеть как my $a = 1|2|3
;
Если когда-нибудь будет реализован, он будет работать интуитивно, как будто $a==1
будет истинным одновременно с $a==2
. Также, например, $a+1
даст вам значение 2|3|4
.
Эта функция фактически доступна в Perl5, а также через модули Perl6 :: Соединение и Quantum :: Суперпозиции, но без синтаксического сахара (через «функции» all
и any
).
По крайней мере, для сравнения (b < any(1,2,3)
) он также был доступен на экспериментальном языке Microsoft Cω, однако нигде не был задокументирован (я просто попробовал его, когда смотрел на Cω, и он просто работал).
сладкий! Это ... Перл, она неплохо звучит.
(1 | 2 | 3) + 1 = (1 + 1 | 2 + 1 | 3 + 1) = (2 | 4 | 5)? Я думаю, у вас там ошибка. : o)
Это то же самое, что вы можете делать в Prolog. Вы определяете правила, которые ограничивают ваши переменные, а затем позволяете Prolog разрешить их ...
Чтобы привыкнуть к нему, нужно время, но он отлично подходит для определенных проблем, если вы знаете, как его использовать ...
фактически, в этом утверждении x и y могут быть почти любыми! Например, x = -3, y = 6; х = 0, у = 3; x = 4, y = -1 и т. д.