APL中的续行

时间:2015-07-12 03:18:33

标签: apl

APL中是否有行继续符,即表示输入尚未完成并继续解析下一行的字符?

我想要的原因是以类似于其形状的格式输入数组,例如,而不是:

Forecast ← 4 6 ⍴ 150 200 100 80 80 80 300 330 360 400 500 520 100 250 350 380 400 450 50 120 220 300 320 350

我想写(其中\是假设的延续字符):

Forecast ← 4 6 ⍴ \
150 200 100  80  80  80 \
300 330 360 400 500 520 \
100 250 350 380 400 450 \
 50 120 220 300 320 350

我使用GNU APL,如果它很重要,而且我是一个几乎完全的新手,所以如果我还没看到它就道歉。

3 个答案:

答案 0 :(得分:5)

不,我所知道的APL的任何现代版本中都没有像行继续符一样的东西。

但是你有一点 - 在定义数组时视觉保真度很重要,但它从未真正在语言层面得到解决。

我可能已经完成了

Forecast ← 4 6 ⍴ 150 200 100 80 80 80, 300 330 360 400 500 520, 100 250 350 380 400 450, 50 120 220 300 320 350

Forecast ← 0 ⍴ 0
Forecast ← Forecast, 150 200 100  80  80  80 
Forecast ← Forecast, 300 330 360 400 500 520 
Forecast ← Forecast, 100 250 350 380 400 450 
Forecast ← Forecast,  50 120 220 300 320 350
Forecast ← 4 6 ⍴ Forecast

当需要显式格式化时。

多年前,某些版本的APL允许您输入带有嵌入式回车功能的字符串,只需在完成之前不输入尾随引号即可。此功能具有类似的效果,但仅适用于字符串,仅适用于单个功能行。它最终被从IBM APL和Sharp APL中删除,可能还有许多其他人。对于那些陷入看似输入循环的用户来说可能会感到困惑,或者本机del编辑器之后无法处理这些行。

答案 1 :(得分:2)

使用GNU APL(可能还有其他版本),您可以使用以下语法:

A ← ⊃⍎¨⎕INP 'END'
  1 0 0
  0 1 0
  0 0 1
 'END'

此致

答案 2 :(得分:2)

Dyalog的MiServer使用了一个很好的命令,使开发人员能够通过函数“ScriptFollows”包含作为APL-Code中页面一部分所需的JS-Code,该函数只扫描此语句后面的行并返回所有文本下一段连续注释的行。 这个想法也可以(ab-)用于帮助您的请求:

∇ foo
⍝ required functions need to be in the WS or can be defined here:
 dtlb←{⍵{((∨\⍵)∧⌽∨\⌽⍵)/⍺}' '≠⍵}   ⍝ delete trailing blanks
 ScriptFollows←{{∊{'⍝'=⊃⍵:'' ⋄ ' ',dtlb ⍵}¨1↓¨⍵/⍨∧\'⍝'=⊃¨⍵}dtlb¨(1+2⊃⎕LC)↓⎕NR 2⊃⎕SI}
⍝ end of initialization...
⍝ and then could just write:

 arr←4 4⍴2⊃⎕VFI ScriptFollows ⍬
⍝ 1 2 3 4
⍝ 5 6 7 8
⍝ 9 10 11 12
⍝ 13 14 15 16
∇

缺点:数组的rho需要与数据无关,因此当您需要编辑数据时,您必须在两个地方进行编辑。除此之外,我必须说我真的爱上了这个ScriptFollows - 东西; - )