有没有一种从右到左阅读的编程语言?

Nik*_*iou 3 programming-languages

我很确定现代工业强度的编程语言,全部从左到右阅读

但是在整个编程语言生态系统中,是否有从右到左阅读语言的例子?

除了更好地与以这种方式编写的人类语言保持一致之外,这样的语言还有什么优势吗?


例子 :

int a = 5; // read left to right
tfel ot thgir daer // ;5 = a tni 
Run Code Online (Sandbox Code Playgroud)

Rik*_*dyP 6

APL 是一种语言,它通过统一某些结构来克服传统数学符号的不一致(以及输入/解析/执行的困难),例如:

多维数组归约(其中 reduce 构造最初是这样命名的)

      +?2 4 6   ? Sum of a list
12
      ×?2 4 6   ? Product of a list
48
      2 3??6    ? A 2 row, 3 column matrix
1 2 3
4 5 6
      +?2 3??6  ? Sum down the columns
5 7 9
Run Code Online (Sandbox Code Playgroud)

内积

      2 3 4+.×1 0 ¯1   ? Vector inner (dot) product
¯2
      +/2 3 4×1 0 ¯1   ? Equivalent expression for vectors
¯2
      (2 2?1 0 1)(2 2?2 5 4 3)   ? Two matrices
?????????
?1 0?2 5?
?1 1?4 3?
?????????
      (2 2?1 0 1)+.×(2 2?2 5 4 3)   ? Matrix inner product
2 5
6 8
      1 2 3 ?.= 1 2 2   ? Are all elements equal?
0   
Run Code Online (Sandbox Code Playgroud)

因为它是由传统数学启发然后它遵循F(G(X)): f g x装置应用gx,然后应用f到这个结果,因此从右到左f(g(x))也是有效的 APL。

演示这如何影响事物的最简单方法是:

      84 - 12 - 1 - 13 - 28 - 9 - 6 - 15  
70
Run Code Online (Sandbox Code Playgroud)

这给出0了传统的数学执行顺序。带括号:

      84 - (12 - (1 - (13 - (28 - (9 - (6 - 15))))))     ? APL
70
      (((((((84 - 12) - 1) - 13) - 28) - 9) - 6) - 15)   ? Traditional maths
0
Run Code Online (Sandbox Code Playgroud)

虽然它是一种通用编程语言,用于从金融到 3D 图形的应用程序,但您可以在 APL Wiki 上看到更多与数学符号的比较:https : //aplwiki.com/wiki/Comparison_with_traditional_mathematics


话虽如此,APL 仍然基本上是从左到右“读取”(由人类),即使它是“从右到左”解析和执行的,即使如此,它更多的是“函数具有很长的右范围和短左范围”。例如,使用语句分隔符?在一行中包含多个语句:

      2+2 ? 3 4 5 ? ?A?'APL'
4
3 4 5
1 16 12
Run Code Online (Sandbox Code Playgroud)

最左边的语句首先执行,但每个单独的语句都按上述方式进行解析。


Wez*_*ezl 5

Befunge就是这样一种语言 :)

"!dlrow olleH">:#,_@
Run Code Online (Sandbox Code Playgroud)

是一个标准的 Hello world 程序,但这实际上是从左到右计算的。

<v_@#:<"Hello world!"
 >,>>>^
Run Code Online (Sandbox Code Playgroud)

这个 ^ 从右到左计算,也有一些从上到下和从下到上的运动。你可以在https://www.bedroomlan.org/tools/befunge-playground/#prog=hello,mode=edit运行这个程序。

Unefunge是一个没有上下运动的变体,但它仍然是图灵完备的。如果你想要严格的从右到左的程序,你可以在 unefunge 中编写,只要你的程序开始<向正确的方向发送指令指针。

有关更多信息,Stack Overflow 有一个标签。