【问题标题】:Are there any languages with "lateral" assignment operators?有没有带有“横向”赋值运算符的语言?
【发布时间】:2013-09-19 21:16:46
【问题描述】:

我不知道我在说什么的好名字,但是,大多数编程语言使用这样的赋值语句语法:

(变量)(赋值运算符)(表达式)

还有一些有一些特殊的赋值操作符,比如var1 += var2相当于var1 = var1 + var2

我的问题基本上是,是否有任何语言可以像上面那样处理 +=,但也有一个 =+ 运算符,以便 var1 =+ var2 等同于 var2 = var2 + var1

本质上,是否存在具有“镜像”赋值运算符的编程语言,以便右侧的变量是分配一个新变量(而不是左侧的变量)?

编辑:

我想我所指的一个更好的例子是一种语言,您可以在其中将(variable) (assignment operator) (expression)(expression) (assignment operator) (variable) 作为有效语句。

【问题讨论】:

  • 所以你想要像 x = y + z 这样的东西也写成 y + z = x 吗?拥有这个有什么价值?
  • 没有,我猜?我只知道,传统上,变量位于左侧。而且,考虑到一些更深奥的语言,我真的无法想象没有一种支持这一点。
  • 是的,很难将其描述为横向,向后会更近。想不出这样的设施能让我更好地表达自己的情况。
  • 致因为它“主要基于意见”而提议投票搁置它的无情的人:如果我们在这里陈述的都是事实,这如何基于意见?跨度>

标签: operator-keyword mirror


【解决方案1】:

编程语言的作者通常会尽量保持他们的语言简单,没有任何不必要的冗余。因此,进行任何类型的双边评估都是多余且不必要的。它只会使语言规范增加 20 页。我认为没有语言具有此功能。

顺便说一句,您的“语法”(语法规则)不清楚。如果有人写了怎么办

var x = 3, y = 2;
x = y;

顺便说一下,Pascal 有一个赋值的“方向”。实际上,您可以将代码编写为

var x = 3, y = 2;
x := y;
y =: x;

并为此编写您自己的简单预处理器,但同样,我认为这只是“干净”语言的复杂性。

【讨论】:

  • 好吧,如果我要设计这样一种语言,我很可能不会使用“=”运算符。我可能有一个“。=”运算符(当变量在左侧时)和一个“=”。 (当变量在右边时)。
  • +1 表示第一段,但如果您有一条歧义规则,则可以解决您的第一个代码示例:例如,在这种情况下,从左到右始终具有偏好。
  • @IvanKuckir 相信混淆是一种安全形式的人在阅读了旅游预处理器的建议后会达到高潮。但即使我现在恨你可能带来新一波 Pascal/Delphi 混淆愤怒,但我仍然希望我能多次支持你,因为那只是纯粹的邪恶天才。
【解决方案2】:

您提出的建议只是一种使代码更难阅读的方法。如果=+ 运算符只是合成糖用于以不同的顺序编写变量,那么使用=+ 就没有任何价值。但既然你喜欢这种奇怪的东西,你肯定会喜欢像 BefungePiet 这样的语言,它们以一种有点扭曲的方式支持它。

【讨论】:

  • 他没有提出任何建议。他在问它是否已经完成。 -1
【解决方案3】:

有些 COBOL 指令是这样的。例如。 ADD B TO A 在其他语言中相当于“A += B”。

【讨论】:

    猜你喜欢
    • 2015-12-14
    • 1970-01-01
    • 2013-03-06
    • 2013-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-02
    • 2012-11-20
    相关资源
    最近更新 更多