为什么 map on list 会产生额外的 []
why map on list generates extra []
为什么
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])
这是 map
的正确行为。
print
命令returns NULL
.
foo := print(1);
1
foo :=
lprint(foo);
NULL
应用于列表的map
命令将始终return一个列表。 map
的 return 值不是对传递给 map
.
的第一个参数(运算符)的任何调用的 return 值
让我们再举一个例子,用另一个程序 returns NULL
。
f := proc(x) NULL; end proc:
map(f, [1,2,3]);
[]
所以原始列表 [1,2,3]
的每个条目都被 NULL
替换,这导致三个 NULL
的表达式序列,最终成为 NULL
.因此,在此处应用 map
的最终结果是 [NULL]
,它会生成空列表 []
.
bar := NULL, NULL, NULL;
bar :=
lprint(bar);
NULL
[ NULL, NULL, NULL ];
[]
如果您不想在您的示例中看到从 map
编辑的空列表 return,则以完整的冒号结束该语句。
如果您使用 seq
而不是 map
来执行此操作,那么 return 值将只是 NULL
(因为它会产生三个 NULL
s,如上所示变为 NULL
).
seq(print(x), x=[1,2,3]);
1
2
3
lprint(%);
NULL
为什么
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])
这是 map
的正确行为。
print
命令returns NULL
.
foo := print(1);
1
foo :=
lprint(foo);
NULL
应用于列表的map
命令将始终return一个列表。 map
的 return 值不是对传递给 map
.
让我们再举一个例子,用另一个程序 returns NULL
。
f := proc(x) NULL; end proc:
map(f, [1,2,3]);
[]
所以原始列表 [1,2,3]
的每个条目都被 NULL
替换,这导致三个 NULL
的表达式序列,最终成为 NULL
.因此,在此处应用 map
的最终结果是 [NULL]
,它会生成空列表 []
.
bar := NULL, NULL, NULL;
bar :=
lprint(bar);
NULL
[ NULL, NULL, NULL ];
[]
如果您不想在您的示例中看到从 map
编辑的空列表 return,则以完整的冒号结束该语句。
如果您使用 seq
而不是 map
来执行此操作,那么 return 值将只是 NULL
(因为它会产生三个 NULL
s,如上所示变为 NULL
).
seq(print(x), x=[1,2,3]);
1
2
3
lprint(%);
NULL