在代数中,如果我声明 x + y = 3,我使用的变量将保存值 2 和 1 或 1 和 2。我知道编程中的赋值不是一回事,但我想知道。如果我想表示一个量子怪异粒子的值,我希望我的变量同时具有两个值,然后让它分解为一个或另一个。或者我只是在做梦?
可以说类似的话i = 3 or 2;
吗?
在代数中,如果我声明 x + y = 3,我使用的变量将保存值 2 和 1 或 1 和 2。我知道编程中的赋值不是一回事,但我想知道。如果我想表示一个量子怪异粒子的值,我希望我的变量同时具有两个值,然后让它分解为一个或另一个。或者我只是在做梦?
可以说类似的话i = 3 or 2;
吗?
这是为 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ω实验语言中使用,但是它没有在任何地方记录(我只是在查看 Cω 时尝试过它,它确实有效)。
您不能使用本机类型执行此操作,但没有什么能阻止您创建一个变量对象(假设您使用的是 OO 语言),该对象具有一系列值甚至是概率密度函数而不是实际值。
您还需要定义变量与变量和本机标量之间的所有数学运算符。相等和赋值运算符也是如此。
numpy 数组对向量和矩阵执行类似的操作。
Damien Conways Quantum::Superpositions 可以做你想做的事,
https://metacpan.org/pod/Quantum::Superpositions
但是,您可能需要您的裂纹管。
这也是你可以在 Prolog 中做的事情。您定义约束变量的规则,然后让 Prolog 解决它们......
习惯它需要一些时间,但是一旦你知道如何使用它,它对于某些问题来说是很棒的......
您要问的似乎是如何实现模糊逻辑系统。这些已经存在了一段时间,毫无疑问,您可以很容易地为常用编程语言挑选一个库。
您可以使用结构并手动处理操作。否则,没有一个变量一次只有 1 个值。
变量只不过是内存中的地址。这意味着一个变量恰好描述了内存中的一个位置(长度取决于类型)。因此,只要我们没有“量子记忆”(而且我们没有,而且看起来我们在不久的将来不会拥有它),答案就是“否” 。如果您想对此行为进行编程和建模,您的方法是使用一个数组(长度等于最大多个值的数量)。随之而来的是增加的运行时间,因此必须对每个值进行计算(例如 x+y,必须使用 2 个不同的值 x1+y1、x2+y2、x1+y2 和 x2+y1 进行计算)。
在 Perl 中,您可以 . 如果你使用Scalar::Util,你可以让一个 var 取 2 个值。如果在字符串上下文中使用一个,如果在数字上下文中使用另一个。