将函数标识符转换为字符串

问题描述

如果我在 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 列火车或 atophttps://apl.wiki/atop

DISPLAY functions 然后成为 atop (f(g h))⍵ 的 atop,DISPLAY⍕functions 是 3-train 或 forkhttps://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 -? 查看这些用户命令的帮助。