如何将多个参数传递给 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
我正在尝试编写一些不同的函数,例如 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