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

SICP 习题 (2.20)解题总结: 不确定数量参数

时间:2015-01-09 00:16:31      阅读:290      评论:0      收藏:0      [点我收藏+]

标签:

SICP 习题 2.20 引入了一种新的函数调用方式,就是带 . 符号的不确定参数调用方式。


题中也讲到了, Scheme支持这种调用方式,如果我们把方法定义成下面这个样子


(define (my-method first-p  .  others-p)
  ;…..
)


我们就可以在调用方法my-method时传入大于2的任何数量的参数,比如:

(my-method 1 2 3 4 5 6)

这时my-method获得两个变量,first-p是1,而others-p是一个list,成员有2 3 4 5 6,就是说others-p等于(2 3 4 5 6)


题目要求我们实现一个叫same-parity的方法,该方法接受不确定数量的参数,返回和第一个参数具有同样奇偶性的所有参数。


这道题不难,题目的意思主要是介绍这种不确定数量参数的使用方式。


方法定义如下:


(define (same-parity first . others)
  (display first)
  (newline)
  (display others)
  (newline)
  (if (not (null? others))
      (if (odd? first)
	  (cons first (filter odd? others))
	  (cons first (remove odd? others)))
      (list first)))

这里有点偷懒,使用了系统的filter过程和remove过程, 系统的filter过程可以返回一个列表中满足条件的成员,而系统过程remove返回所有不满足条件的成员。

而odd?过程也是一个系统过程,用于判断一个数的奇偶性。

不过方法里面加了两行打印代码,用于打印first参数和others参数,这样在测试的时候可以更清楚地观察两个参数的值。



SICP 习题 (2.20)解题总结: 不确定数量参数

标签:

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

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