为什么列表上的地图会产生额外[]

时间:2018-06-01 09:36:01

标签: maple

为什么

 map(x->print(x),[1,2,3]);

产生

                           1
                           2
                           3
                           []

[]来自哪里?根据帮助,。

 The map commands apply fcn to the operands or elements of expr.

  op([1,2,3]);

给出

  1, 2, 3

但似乎fcn也适用于列表本身,即op(0,[1,2,3])

1 个答案:

答案 0 :(得分:1)

这是来自map的正确行为。

print命令返回NULL

foo := print(1);
                      1

                    foo :=

lprint(foo);
  NULL

应用于列表的map命令将始终返回列表。 map的返回值不是传递给map的第一个参数(运算符)的任何调用的返回值。

让我们再举一个例子,另一个程序返回NULL

f := proc(x) NULL; end proc:

map(f, [1,2,3]);
                      []

因此原始列表[1,2,3]的每个条目都被NULL替换,这会导致三个NULL s的表达式序列,最终为NULL。因此,在此处应用map的最终结果是[NULL],它会生成空列表[]

bar := NULL, NULL, NULL;
                    bar :=

lprint(bar);            
  NULL

[ NULL, NULL, NULL ];
                      []

如果您不希望在示例中看到从map返回的空列表,则使用完整冒号终止该语句。

如果您使用seq而不是map来执行此操作,则返回值将为正NULL(因为它生成三个NULL的表达式序列,如上所示变为NULL)。

seq(print(x), x=[1,2,3]);
                                           1

                                           2

                                           3

lprint(%);               
  NULL