如何将多个参数传递给 APL 函数

How to pass in multiple arguments to an APL function

我正在尝试编写一些不同的函数,例如 APL 中的标准偏差和线性回归。我需要传入一个 (x, y) 点列表,但我不知道该怎么做,因为我知道 APL 函数的语法只允许传入 0、1 或 2 个参数。 我可以在 APL 中使用任何类型的数组将列表作为数组传递吗?

有几种有效的方法可以做到这一点。例如。使用两个列表,一个用于 x 值,一个用于 y 值:

      ∇ c←x LinReg y
        c←⌽y⌹1,[1.5]x
      ∇
      1 3 2 LinReg 2 8 5
3 ¯1

您还可以传入一个矩阵,其中每一行代表一个 (x,y) 对:

      ∇ c←LinReg xy
        c←⌽xy[;2]⌹1,[1.5]xy[;1]
      ∇
      LinReg 3 2⍴1 2,3 8,2 5
3 ¯1

如果您的 APL 支持,您也可以使用 (x,y) 对列表。例如。在 Dyalog APL 中:

      ∇ c←LinReg xys
        c←⌽(2⊃¨xys)⌹1,[1.5](1⊃¨xys)
      ∇
      LinReg (1 2)(3 8)(2 5)
3 ¯1

但是,请注意,这是在 APL 中表示点的特别低效的方式。

在 APL2 中解决这个问题的一种优雅方法是使用向量赋值。 例如:

    A ← 42 ◊ B ← 'Hello' ◊ C ← 1 2 3   ⍝ multiple arguments A, B, and C
  
    ∇FOO ARG
[1]  (A B C) ← ARG    ⍝ expand arguments into individuals
[2]  'A:' A
[3]  'B:' B
[4]  'C:' C
[5] ∇
      
      FOO (A B C)
 A: 42 
 B: Hello 
 C:  1 2 3