码迷,mamicode.com
首页 > 其他好文 > 详细

SICP 习题 (2.30)解题总结 : Square-Tree

时间:2015-09-27 15:01:19      阅读:259      评论:0      收藏:0      [点我收藏+]

标签:

SICP 习题 2.30 要求我们完成一个叫square-tree的过程,其作用和之前的square过程差不多,square过程是针对简单列表的,将列表中的所有元素求平方,然后返回新的平方数列表。不过square不能对嵌套列表进行处理,如果列表中还包含列表的话会报错。


题目要求我们实现一个square-tree的过程,当输入的列表包含另一个列表时可以对嵌套的列表进行处理,生成所有列表元素的平方数。


这个和之前几道题差不多,都是对树状列表的遍历和处理。题目还要求我们用两种方式实现,一种使用map,一种不使用map。


先看看不使用map的方法,就是不断取列表第一个元素,如果元素是个简单的数就求平方,如果元素是一个列表就递归调用square-tree。处理完第一个元素接着处理后面的cdr部分的内容。


代码如下:

(define (square-tree input-list)
  (if (null? input-list)
      ‘()
      (if (list? (car input-list))
	  (cons (square-tree (car input-list)) (square-tree (cdr input-list)))
	  (cons (square (car input-list)) (square-tree (cdr input-list))))))



如果是使用map的话,就不用自己遍历了,直接使用map过程对所有元素进行处理,如果是数字就求平方,如果是列表就递归调用square-tree-map

(define (square-tree-map input-list)
  (map (lambda (i) 
	 (if (list? i)
	     (square-tree-map i)
	     (square i))) input-list) )


(define (square x)
  (* x x))



版权声明:本文为博主原创文章,未经博主允许不得转载。

SICP 习题 (2.30)解题总结 : Square-Tree

标签:

原文地址:http://blog.csdn.net/keyboardota/article/details/42105267

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!