为何对列表执行map(x->print(x),[1,2,3])会生成额外[]?
为什么
map(x->print(x),[1,2,3])会输出1 2 3 []? 让我来一步步拆解这个问题,帮你搞清楚那个额外的[]到底从哪来:
核心原因:map函数的返回值被自动打印了
从语法来看你用的是Maple,这里的map函数有两个关键行为:
- 它会把指定的函数依次应用到列表的每个元素上(这和帮助文档里说的
apply fcn to the operands or elements of expr完全一致,这里的operands就是列表里的1、2、3,并没有涉及列表本身); - 它会收集每个函数调用的返回值,组成一个新列表并返回。
而print(x)这个函数的特点是:它会在屏幕上输出x,但它自身的返回值是NULL(Maple里的空值)。
完整执行流程
- 当你执行
map(x->print(x),[1,2,3])时,map会遍历列表的三个元素:- 调用
print(1):输出1,返回NULL; - 调用
print(2):输出2,返回NULL; - 调用
print(3):输出3,返回NULL;
- 调用
map把这三个NULL收集起来组成列表,但Maple里多个NULL组成的列表会被简化成空列表[];- 因为你是在交互环境中执行这个表达式,Maple会自动打印整个表达式的返回值——也就是这个空列表
[]。
所以最终你看到的1 2 3 [],前面的1 2 3是三次print调用的输出,后面的[]是map函数返回的空列表被自动打印的结果。
验证一下这个逻辑
你可以试试执行这个命令:
result := map(x->print(x),[1,2,3]);
这时候你会先看到1 2 3,然后输入result;查看变量值,会发现它就是[],这就证实了[]是map的返回值。
再对比一个返回值非空的例子:
map(x->x^2,[1,2,3]);
这个会直接返回[1,4,9],因为每个元素的函数返回值是平方后的数,组成了非空列表。
内容的提问来源于stack exchange,提问作者Nasser
相关产品推荐
相关产品推荐

