练习2.22
题目中Louis的第一个程序将items中的元素一个一个的取出来然后平方然后”推“到answer中。而我们在上一题中则是迭代结构,是将元素平方后”推“到一个大盒子中,而大盒子里又有一个元素被平方然后被”推“到另一个稍微小点的大盒子中去。
而修改后的程序看似解决了问题,其实错得更加离谱了。比如用(list 1 2 3 4 5)作为items一开始传入,程序先将1取出来平方,然后推到最前面,但是其后呢?此时的answer是什么,只不过是一个nil而已。因此每隔一个元素中间就有一个nil。于是返回的结果会是如此的丑陋:( ( ( ( ( ) . 1 ) . 4 ) . 9 ) . 16 ) . 25)。如果你怀疑这个结果是不是真的是因为我刚才那样的解释,没关系,看下面的这个检验。
(cons (cons (cons (cons (cons ‘() 1 ) 4) 9 ) 16 ) 25 )
;Value: ( ( ( ( ( ) . 1 ) . 4 ) . 9 ) .16 ) . 25)