是否有从右到左阅读的编程语言?

时间:2014-08-03 09:20:27

标签: programming-languages

我非常确定现代工业强度编程语言,所有阅读从左到右

但是programming languages的整个生态系统中有从右到左读取语言的示例?

除了更好地与以这种方式书写的人类语言保持一致外,这种语言会有任何优势吗?


示例:

int a = 5; // read left to right
tfel ot thgir daer // ;5 = a tni 

4 个答案:

答案 0 :(得分:5)

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

内积

      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   

由于它受到传统数学的启发,所以它遵循 f(g(x)): f g x 表示将 g 应用于 x,然后将 f 应用于其结果,因此 从右到左f(g(x)) 也是有效的 APL。

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

      84 - 12 - 1 - 13 - 28 - 9 - 6 - 15  
70

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

      84 - (12 - (1 - (13 - (28 - (9 - (6 - 15))))))     ⍝ APL
70
      (((((((84 - 12) - 1) - 13) - 28) - 9) - 6) - 15)   ⍝ Traditional maths
0

虽然它是一种通用编程语言,用于从金融到 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

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

答案 1 :(得分:5)

Befunge 就是这样一种语言 :)

"!dlrow olleH">:#,_@

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

<v_@#:<"Hello world!"
 >,>>>^

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

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

有关详细信息,Stack Overflow 有一个 标记。

答案 2 :(得分:3)

有一种叫做logowriter的孩子的语言后来被翻译成希伯来文,因为希伯来语是RTL,翻译的语言也是如此。

2008年,以色列高中的CS sylabus教授了תמלילוגו语言, http://www.csit.org.il/TSTBAG/2008/899122.pdf

答案 3 :(得分:0)

tfel ot thgir daer // ;5 = a tni 

AFAIK,没有这样的语言,至少不是一个严肃的语言(感谢tohava这个有趣的例子)。仅仅因为它几乎毫无意义。

您可以选择任何现有语言,编写一个反转每一行的单行脚本,并为此“新语言”设置转换器(和后置转换器)。您可以将它合并到构建环境中 - 在编译之前进行转换,反转编译器错误消息的行等等......

但实际上,重点是什么?唯一能从中受益的人是那些使用右手左手获得母语的人(BTW,AFAIK,他们都没有使用拉丁语ABC)。无论如何,他们必须学习一些全新的东西,做世界其他地方的工作更有意义。所有的博客,教程,博客,SO,一切都是用“从左到右”的编程语言编写的。