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)
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装置应用g到x,然后应用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)
最左边的语句首先执行,但每个单独的语句都按上述方式进行解析。
"!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 有一个befunge标签。