如何向 APL 函数传递多个参数

3

我正在尝试在APL中编写几个不同的函数,如标准差和线性回归。我需要传入一个(x, y)点的列表,但我不知道如何做到这一点,因为我知道APL函数的语法只允许传入0、1或2个参数。

有没有一种数组我可以在APL中使用来将列表作为数组传入?


你可以将数组作为参数传递。 - rak1507
如果您指定使用的APL实现,例如APL2、APLX、Dyalog APL、GNU APL等,将有助于其他人回答您的问题。 - Adám
2个回答

4

有几种有效的方法可以实现这个目标。例如,使用两个列表,一个用于 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中表示点非常低效。


1

在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 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接