переменная может иметь несколько значений - PullRequest
2 голосов
/ 20 ноября 2008

В алгебре, если я сделаю утверждение x + y = 3, переменные, которые я использовал, будут содержать значения 2 и 1 или 1 и 2. Я знаю, что присваивание в программировании - это не одно и то же, но я удивился , Если бы я хотел представить значение, скажем, квантово-странной частицы, я бы хотел, чтобы моя переменная имела два значения одновременно и чтобы она позднее перешла в одно или другое. А может, я просто сплю?

Можно ли сказать что-то вроде i = 3 or 2;?

Ответы [ 8 ]

9 голосов
/ 20 ноября 2008

Это одна из функций, запланированных для Perl 6 (переходы), с синтаксисом, который должен выглядеть следующим образом: my $a = 1|2|3;

Если он когда-либо будет реализован, он будет работать интуитивно, как если бы $a==1 был истинным в то же время, что и $a==2. Также, например, $a+1 даст вам значение 2|3|4.

Эта функция на самом деле доступна и в Perl5 через Perl6 :: Junction и Quantum :: Superpositions , но без синтаксического сахара (через 'functions' all и any).

По крайней мере для сравнения (b < any(1,2,3)) он также был доступен на экспериментальном языке Microsoft , однако он нигде не был задокументирован (я просто попробовал его, когда смотрел на Cω, и он просто работал) .

7 голосов
/ 20 ноября 2008

Вы не можете сделать это с нативными типами, но ничто не мешает вам создать переменный объект (предполагая, что вы используете язык OO), у которого есть диапазон значений или даже функция плотности вероятности, а не фактическое значение.

Вам также нужно будет определить все математические операторы между вашими переменными и вашими переменными и собственными скалярами. То же самое касается операторов равенства и присваивания.

массивы numpy делают нечто похожее для векторов и матриц.

2 голосов
/ 20 ноября 2008

Это тоже самое, что вы можете делать в Прологе. Вы определяете правила, которые ограничивают ваши переменные, а затем позволяют Прологу разрешать их ...

Требуется некоторое время, чтобы привыкнуть к нему, но это замечательно для определенных проблем, если вы знаете, как его использовать ...

2 голосов
/ 20 ноября 2008

Damien Conways Quantum :: Суперпозиции могут делать то, что вы хотите,

https://metacpan.org/pod/Quantum::Superpositions

Однако вам может понадобиться трубка.

1 голос
/ 20 ноября 2008

Похоже, вы спрашиваете, как реализовать систему Fuzzy Logic . Они существуют уже давно, и вы, несомненно, можете легко подобрать библиотеку для распространенных языков программирования.

0 голосов
/ 20 ноября 2008

В Perl вы можете. Если вы используете Scalar :: Util , переменная может принимать 2 значения. Один, если он используется в строковом контексте, и другой, если он используется в числовом контексте.

0 голосов
/ 20 ноября 2008

Переменная - это не более чем адрес в памяти. Это означает, что переменная описывает ровно одно место в памяти (длина зависит от типа). Таким образом, до тех пор, пока у нас нет «квантовой памяти» (а у нас ее нет, и она не выглядит так, как будто она у нас будет в ближайшем будущем), ответ будет NO . Если вы хотите запрограммировать и смоделировать это поведение, вы можете использовать массив (длина которого равна числу макс. Множественных значений). При этом увеличивается время выполнения, следовательно, вычисления должны выполняться для каждого из значений (например, x + y, должно вычисляться с 2 различными значениями x1 + y1, x2 + y2, x1 + y2 и x2 + y1).

0 голосов
/ 20 ноября 2008

Вы можете использовать структуру и обрабатывать операции вручную. В противном случае переменная не может иметь только 1 значение за раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...