【SICP练习】54 练习2.22

来源:互联网 发布:阿里云美国账号用途 编辑:程序博客网 时间:2024/05/16 15:09


练习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)

0 0