number?
関数 number? は引数が数のアトムなら真で、そうでなければ偽になる。number? は Scheme では書くことができない基本関数だと紹介されている。実際、Gahche には組み込みで存在する。
gosh> (number? 5) #t gosh> (number? 'a) #f
さて、今回の課題はここから。まずは no-nums。
no-nums
no-nums はラットからすべての数を取り除いたものを返す。
(define no-nums (lambda (lat) (cond ((null? lat) (quote ())) ((number? (car lat)) (no-nums (cdr lat))) (else (cons (car lat) (no-nums (cdr lat))))))) (print (no-nums '(5 pears 6 prunes 9 dates)))
(number? (car lat))
が真なら (car lat)
を cons せずに再帰し、そうでなければ cons して再帰している。ま、そんなに難しくない。
実行:
^o^ > gosh no-nums.scm (pears prunes dates)
all-nums
all-nums は no-nums とは逆に、ラットからすべての数を取り出してタップを作る。
no-nums ができているんだから簡単。cons する条件を逆にするだけだ。
(define all-nums (lambda (lat) (cond ((null? lat) (quote ())) ((number? (car lat)) (cons (car lat) (all-nums (cdr lat)))) (else (all-nums (cdr lat)))))) (print (all-nums '(5 pears 6 prunes 9 dates)))
実行:
^o^ > gosh all-nums.scm (5 6 9)