一次输出一个数组的每个元素的传统方法是什么?
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
我正在寻找一种紧凑的方式来打印数组中的每个元素,这在 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