我正在尝试在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
∇ c←LinReg xy
c←⌽xy[;2]⌹1,[1.5]xy[;1]
∇
LinReg 3 2⍴1 2,3 8,2 5
3 ¯1
∇ 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