问题描述
如果我在 APL 中有一个函数向量,有没有办法将函数名称的向量作为字符串获取?我试过 disPLAY 和 ⍕ 都没有成功:
)copy display
C:\Program Files (x86)\Dyalog\Dyalog APL 16.0 Classic\ws\display.DWS sa
ved Thu Jul 25 08:51:54 2019
functions ← (disPLAY) disPLAY
disPLAY functions
∇disPLAY ∇disPLAY ∇disPLAY
disPLAY ⍕functions
∇disPLAY ⍕ ∇disPLAY ∇disPLAY
另外,为什么 disPLAY 调用的输出中的元素周围没有边框?
解决方法
不幸的是,APL 不是函数式语言,所以没有函数数组这样的东西。
您在 functions
拥有的是 2 列火车或 atop:https://apl.wiki/atop
DISPLAY functions
然后成为 atop (f(g h))⍵
的 atop,DISPLAY⍕functions
是 3-train 或 fork:https://apl.wiki/fork
接近 Dyalog APL 的一种方法是使用命名空间数组,所有命名空间都包含类似命名的函数。然后,您可以在一次调用中使用相同的参数调用所有函数:
ns_array←⎕ns¨3⍴⊂⍬
ns_array[1].dfn←{⍺+⍵}
ns_array[2].dfn←{2×⍵}
ns_array[3].dfn←{'wow'}
3 ns_array.dfn 42
┌──┬──┬───┐
│45│84│wow│
└──┴──┴───┘
有关在 Dyalog 中模拟函数数组的可能方法的更多信息,请参阅 https://dfns.dyalog.com/n_Function_arrays.htm
至于 DISPLAY
函数。它需要一个 APL 数组参数。这些是名称类 2 的名称。您可以使用 ⎕NC'name'
获取数组的名称类。
您可能会发现在会话中使用 ]box on
打开装箱以显示装箱嵌套数组会更好。
事实上,使用 ]box on -trains=tree
,然后输入示例中的“functions”并按 Enter。然后 box 用户命令显示您创建的默认函数的树结构。实际上不要这样做,你会得到大量丑陋的输出。试试用 +⌿÷≢
和 avg←+⌿÷≢
代替。
最后,我的会话中通常有 ]box on -trains=tree -fns=on
和 ]rows -fold=3
(您可以使用 Session→Save on Windows 和 {2⎕NQ⎕SE'FileWrite'⊣⎕SE⎕WS'File'⍵}'/path/to/session_file.dse
在 RIDE 中保存设置。)
使用 ]box -?
和 ]rows -?
查看这些用户命令的帮助。