代数で x + y = 3 というステートメントを作成すると、使用した変数は 2 と 1 または 1 と 2 のいずれかの値を保持します。たとえば、量子的に奇妙な粒子の値を表現したい場合、変数に同時に 2 つの値を持たせ、後でどちらか一方に解決する必要があります。それとも私はただ夢を見ているだけですか?
のようなことを言うことは可能i = 3 or 2;
ですか?
代数で x + y = 3 というステートメントを作成すると、使用した変数は 2 と 1 または 1 と 2 のいずれかの値を保持します。たとえば、量子的に奇妙な粒子の値を表現したい場合、変数に同時に 2 つの値を持たせ、後でどちらか一方に解決する必要があります。それとも私はただ夢を見ているだけですか?
のようなことを言うことは可能i = 3 or 2;
ですか?
これは、Perl 6 (ジャンクション) で計画されている機能の 1 つで、構文は次のようになりmy $a = 1|2|3
ます。
$a==1
実装された場合、 と同時に true になるように、直感的に機能し$a==2
ます。また、たとえば、$a+1
の値が返されます2|3|4
。
この機能は、実際には Perl5 でもPerl6::JunctionおよびQuantum::Superpositionsモジュールを介して利用できますが、構文シュガーなしで ('functions'all
およびを介してany
) 利用できます。
少なくとも比較のために ( ) Microsoft Cωb < any(1,2,3)
実験言語でも利用できましたが、どこにも文書化されていませんでした (Cω を見ているときに試してみたところ、うまくいきました)。
ネイティブ型ではこれを行うことはできませんが、実際の値ではなく値の範囲または確率密度関数を持つ変数オブジェクト (オブジェクト指向言語を使用していると仮定) を作成することを妨げるものは何もありません。
また、変数と変数およびネイティブ スカラーの間のすべての数学演算子を定義する必要があります。等値演算子と代入演算子についても同じことが言えます。
numpy 配列は、ベクトルと行列に対して同様のことを行います。
Damien Conways Quantum::重ね合わせはあなたが望むことをするかもしれません。
https://metacpan.org/pod/Quantum::重ね合わせ
ただし、クラックパイプが必要になる場合があります。
それもPrologでできることです。変数を制約するルールを定義し、Prolog に解決させます...
慣れるまで少し時間がかかりますが、使い方を知ってしまえば、特定の問題には素晴らしいです...
あなたが求めているのは、ファジーロジックシステムを実装する方法のようです。これらはしばらく前から存在しており、一般的なプログラミング言語のライブラリを非常に簡単に選択できることは間違いありません.
構造体を使用して、手動で操作を処理できます。それ以外の場合、変数は一度に 1 つの値しか持ちません。
変数は、メモリへのアドレスにすぎません。つまり、変数はメモリ内の 1 つの場所を正確に記述します (長さは型によって異なります)。したがって、「量子メモリ」がない限り(そして、それを持っておらず、近い将来に持つようには見えません)、答えはNOです。この動作をプログラムしてモデル化したい場合は、配列を使用する方法があります (長さは最大複数値の数に等しい)。これにより、実行時間が長くなるため、各値に対して計算を行う必要があります (たとえば、x+y は、2 つの異なる値 x1+y1、x2+y2、x1+y2、および x2+y1 で計算する必要があります)。
Perl では、次のことができます。Scalar::Utilを使用すると、var に 2 つの値を持たせることができます。1 つは文字列コンテキストで使用される場合で、もう 1 つは数値コンテキストで使用される場合です。