Dolist 与 Domatrix

在定义了函数之后,即使该函数未针对列表定义,也可以将其应用于一组参数值。 这是通过 dolist 和 domatrix 关键字实现的。这些语句的格式为:

    dolist f(x,y)
    domatrix f(x,y

例如,假设您已定义了函数:

Quad(x):=x*x+5x+3

接下来,您想将此函数应用于名为 Points 的列表中的每个元素:

Points:=[1,2,3,4,5]

您可以使用以下表达式来实现:

dolist Quad(Points)

其结果为 [9,17,27,39,53]。

如果您提供的函数只接受一个参数 f(x),则 dolist 和 domatrix 的作用相同。即:

dolist f(a)   = [f(a[0]),f(a[1]),f(a[2]),...]
domatrix f(a) = [f(a[0]),f(a[1]),f(a[2]),...]

例如:

dolist F(1..4) = [F(1),F(2),F(3),F(4)]

如果您提供的函数接受多个参数 f(x,y),则 domatrix 会导致应用所有参数的所有排列,而 dolist 则将参数列表视为并行的:

dolist f(a,b) = [
    f(a[0],b[0]),
    f(a[1],b[1]),
    f(a[2],b[2]),
    ...
]
domatrix f(a,b) = [
    [f(a[0],b[0]),f(a[0],b[1]),f(a[0],b[2]),...],
    [f(a[1],b[0]),f(a[1],b[1]),f(a[1],b[2]),...],
    [f(a[2],b[0]),f(a[2],b[1]),f(a[2],b[2]),...],
    ...
]

例如,如果您将 f(x,y) 定义为

Multiply(x,y):=x*y

那么,表达式

dolist Multiply(1..10,1..10)

生成 10 个元素的向量

  1
  4
  9
 25
 36
 49
 64
 81
100

然而,表达式

domatrix Multiply(1..10,1..10)

生成 100 个元素的矩阵

 1    2    3    4    5    6    7    8    9   10  
 2    4    6    8   10   12   14   16   18   20  
 3    6    9   12   15   18   21   24   27   30  
 4    8   12   16   20   24   28   32   36   40  
 5   10   15   20   25   30   35   40   45   50 
 6   12   18   24   30   36   42   48   54   60  
 7   14   21   28   35   42   49   56   63   70  
 8   16   24   32   40   48   56   64   72   80  
 9   18   27   36   45   54   63   72   81   90  
10   20   30   40   50   60   70   80   90  100

您可以将 dolist 和 domatrix 关键字与任何函数一起使用,包括原语和用户定义的函数。此外,列表参数可以包含其他列表或矩阵作为元素。也就是说,即使 A、B 和 C 本身是列表或矩阵,dolist F([A,B,C]) = [F(A),F(B),F(C)] 仍然成立。