SICP 習題 (2.20)解題總結: 不確定數量引數
阿新 • • 發佈:2019-01-30
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引數,這樣在測試的時候可以更清楚地觀察兩個引數的值。