3

我想定义一个带有单个参数的匿名函数向量,然后在该向量上映射一个参数,返回每个索引x的结果数组。f(x)这在 Dyalog 中可行吗?

我问是因为我天真地尝试创建这样一个闭包向量:

fs ← {⍵×2} {⍵×4} {⍵×8}

行为奇怪。fs

 fs[1]
   ∇{⍵×2}
 ∇       ∇{⍵×4}
 ∇       ∇{⍵×8}
 ∇  [ 1

⍴fs返回相似的输出而不是 3,让我相信我根本没有制作数组。解决这个问题的正确方法是什么?

4

3 回答 3

4
于 2018-04-21T11:18:21.043 回答
3

在 Dyalog APL 中创建一个近似于函数数组的结构的另一种方法是创建一个包含函数的命名空间数组。例如:

    nss←⎕NS¨'' '' '' 
    nss.⍎ 'f←{⍵×2}' 'f←{⍵×4}' 'f←{2+⍵×3}' 
    nss.f 11 
22 44 35

    nss[2].f 2
8
于 2018-04-21T12:15:38.573 回答
1

dfns 工作区(与 Dyalog APL 一起提供)讨论了函数数组,并提供了多种处理方法。

或者,您可以使用以下一元运算符,它作为操作数采用单行函数定义和/或名称的数组(命名函数可能是多行的)并返回一个函数数组,然后可以应用该数组:

 r←{x}(fns Fns)y;nss;ns
 nss←{⎕NS ⍬}¨fns
 ns←'.(',⍨⍕⎕THIS
 nss.⍎'f←'∘,¨ns∘,¨fns,¨')'
 :If 900⌶⍬
     x←⊢
 :EndIf
 r←x nss.f y

在线尝试!

于 2018-04-21T22:26:30.957 回答