【发布时间】:2021-12-24 23:09:31
【问题描述】:
我正在使用 Dyalog 的 ⎕nget 的“行数组”模式读取文件:
lines _ _ ← ⎕nget '/usr/share/dict/words' 1
而且它似乎有效:
lines[1]
10th
但个别元素似乎不是字符数组:
line ← lines[1]
line
10th
≢ line
1
⍴ line
在这里,我们看到第一行的计数为 1,形状为空数组。我无法进一步索引它; lines[1][1] 或 line[1] 是排名错误。如果我在 RHS 上使用 ⊂,我可以一次将值分配给多个变量,并为每个变量获得相同的行为。但是,如果我在没有左鞋的情况下 进行多项分配,我会得到:
word rest ← line
word
10th
≢ word
4
⍴ word
4
我们终于得到了我期望的字符数组!然而,它并没有明显与隐藏在line 中的其他任何东西分开;另一个变量是相同的:
rest
10th
≢ rest
4
⍴ rest
4
word ≡ rest
1
值得注意的是,当我查看 word 时,它没有前导空格,这与 line 不同。因此,⎕nget 返回的内容矩阵中的各个数组元素似乎被进一步包裹在不显示形状或计数的东西中,并且无法被索引到,但是当我使用解构赋值时,它会展开他们。感觉很像 Common Lisp 中的多值内容。
如果有人能解释这里发生了什么,我将不胜感激。我觉得我错过了一些非常基本的东西。
【问题讨论】: