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

88 篇文章 30 订阅
74 篇文章 1 订阅

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参数,这样在测试的时候可以更清楚地观察两个参数的值。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值