尝试对 APL 的语法进行中文化。挑选了几个符号与例程进行中文表达,之后综合考虑用何种语法比较可行。

三个 APL 符号

APL 语言中,符号 ⍳ 为希腊字母,音 iota,Dyalog开发环境中,⍳ 的快捷键是 `i,应该是 iota 的开头。

当仅有一个参数时用于创建自然数列。⍳3 在 APL 最初设计 中,是 0 开头,长度为 3 的数列,即从 0 到 2 的数列。而在 APL 语言至今的不同实现中,并不一定默认以0开头,如在 Dyalog 18.0 中,默认为 1 开头的数列。这是使用交流的一个潜在问题。那么是否可以用更明确的表达规避?比如直接用“0到2”或“1到3”。

当有左右两个参数时,符号 ⍳ 获取后者在前者中的位置,比如 ‘abcd’ ⍳ ‘ac’ 返回 1 3,对应中文“’ac’在’abcd’的位置”。

符号 ⍴ 音 rho,快捷键 `r,当有两个参数时,为“塑形”,即将后者改为前者指定的形状。比如 ⍳6 为 1到6,那么 “3 2 ⍴ ⍳6”返回如下矩阵:

1 2
3 4
5 6

如果用中文表达:1到6 塑形(为) 3 2

当仅有一个参数时,为取该参数的“形状”,如果是数列即一维矩阵,则取其长度,比如 ⍴⍳6 返回 6,对应中文“1到6的形状”;如果是矩阵,则返回行列数,如上面的矩阵 “⍴ 3 2 ⍴ ⍳6” 返回 3 2,对应中文“1到6塑形为 3 2的形状。

下箭头 ↓ 快捷键 `u。当有两个参数时,将后者开头的前者个元素删除,如 2↓⍳6 返回 3到6,对应中文表达“1到6删前2”。

一个参数时,为拆分,如上面矩阵“↓3 2⍴⍳6”返回包含下面三项的列:1 2, 3 4, 5 6 。对应中文“1到6塑形为3 2拆开 split。

中文语法

APL 语言的符号在单个和两个参数时基本有两种语义,有些比较相关,如三个符号中的 ⍴,都与形状有关。但 ⍳ 和 ↓ 的两种语义似乎关联不大(?)。前面这种情况还勉强可用单一汉字“形”对应 ⍴,但后面这种情况下似乎很难选取汉字与每个符号进行一一对应。

如果使用不同字词表达同一符号的不同语义,但仍然保留APL语法,即:

  • 从右到左的阅读顺序
  • 单参数时,符号在左
  • 双参数时,符号在中

那么一种可能的对应中文语法设计如下(暂用两字词语表达,具体用词待商榷,暂以空格分词):

⍳6
数列6

'abcd' ⍳ 'ac'
'abcd' 位置 'ac'

⍴⍳6
形状 数列6

3 2 ⍴ ⍳6
3 2 塑形 数列6

↓3 2⍴⍳6
拆分 3 2 塑形 数列6

2↓⍳6
2 去头 数列6

看起来似乎还可以。是否有更接近中文自然语言语法的设计、同时保留 APL 语法的优势比如可以一个方向阅读理解呢?


两含义不一定相同,但不同符号的语义也许相关,可用同汉字表达

(3 2 ⍴ ⍳6) ⍳ 5 6 返回 3。