一次输出一个数组的每个元素的传统方法是什么?

What's a traditional way to output each element of an array one at a time?

我正在寻找一种紧凑的方式来打印数组中的每个元素,这在 1996 年之前是可行的。

在 Dyalog 中我可以这样做:

      ⎕←¨1 2 3
1
2
3

但这是一个语法错误,例如GNU APL,大概是因为 quad-gets 并不是一个你可以应用每个函数的函数。如果我把它变成一个带有 dfn 的,那效果很好:

      { ⎕←ω }¨1 2 3

但我假设有一种不笨重的预定义方法可以做到这一点,而不必去写一个 tradfn,我可能会从中学到很多东西。

编辑:抱歉,我没有意识到不同数据类型的答案会有所不同。重塑为列向量适用于数值,但如果数组是封闭的字符向量,则重塑会导致输出缩进(或装箱,如果启用),这不是 for-each 版本的情况.

这是一个简单的例子:

      text ← 5/⊂'Line of text'

这是期望的输出:

      { ⎕←ω } ¨ text
Line of text
Line of text
Line of text
Line of text
Line of text

对于如何实现这一点有什么建议吗?

Mix 的两种变体都不能在 GNU 和 Dyalog 中运行。在 Dyalog 中,向上箭头让我得到 boxed/indented 输出(但只有一个级别,而不是 reshape 的两个级别),而在 GNU 中,它只输出第一个元素。 Right shoe 在 GNU 中按预期工作,但 returns 仅在 Dyalog 中的第一个元素。我希望通用功能的语义在实现之间更加一致...

通常的方法是重塑数组,使其默认显示形式每行一个元素。对于像 1 2 3 这样的向量,重塑为 3 行 1 列矩阵会做:

      ⎕←3 1⍴1 2 3
1
2
3

许多 APL 具有单子 (Table) mean "reshape into a matrix by ravelling every major cell":

      ⎕←⍪1 2 3
1
2
3

Try it! 如果您有嵌套数据,例如一个字符向量(“字符串”)的向量,你可以 mix 如果它们的长度不等,它在技术上用空格填充它们,但这是打印列表的传统方式,例如纵向名称:

      ⎕←⍪'Abe' 'Bonnie' 'Carl' 'Donna'  ⍝ ⍪ has indentation indicating nesting
 Abe
 Bonnie
 Carl
 Donna
      ⎕←↑'Abe' 'Bonnie' 'Carl' 'Donna'
Abe   
Bonnie
Carl  
Donna