6

APL 中函数向量(数组)的语法是什么?

我尝试了以下方法,但它们分别被解释为 3 列和 2 列:

{1},{2}
{1} {2}

PS。顺便说一下,我希望使用更复杂(并且可能命名)的函数来做到这一点,{1}上面的例子很简短

4

2 回答 2

8

可以使用⎕OR对象表示)获得函数数组,并且这些对象在用作操作数时会隐式地重新构成函数。(你也可以明确地使用⎕FX.)首先定义一些辅助操作符是最简单的:

      _Arrayify←{f←⍺⍺ ⋄ ⎕OR'f'}
      _Apply←{2=⎕NC'⍺':⍺ ⍺⍺ ⍵ ⋄ ⍺⍺ ⍵}

现在,让我们定义一些示例函数:

      A←{2×⍵}
      B←{⍵÷2}
      C←{-⍵}

我们创建一个 3 元素的函数向量,并检查它确实是一个“正常”数组:

      fnArray←(A _Arrayify⍬)(B _Arrayify⍬)(C _Arrayify⍬)
      ⍴fnArray
3

让我们提取第二个函数并应用它:

      (2⊃fnArray)_Apply 10
5

我们也可以创建一个应用函数,所以我们可以在它上面使用操作符:

      Apply←{⍺ _Apply ⍵}
      fnArray Apply¨10
20 5 ¯10
于 2021-11-29T08:44:17.717 回答
5

Dyalog APL 不正式支持函数数组,您可以通过创建具有相同名称函数的命名空间数组来笨拙地模拟它们。

      (a←⎕NS⍬).f←2∘×
      (b←⎕NS⍬).f←÷∘2
      (c←⎕NS⍬).f←-
      f←(a b c).f
      f 4
8 2 ¯4

Maria Wells 建议使用运算符生成一系列函数

于 2021-11-28T23:26:12.453 回答