理系学生日記

おまえはいつまで学生気分なのか

問題2-20

(define (reverse l)
  (define (sub-reverse list stack)
    (if (null? list) stack
	(sub-reverse (cdr list) (cons (car list) stack))))
  (sub-reverse l ()))

(define (same-parity head . li)
  (define l (reverse li))
  (define (sub-same-parity residual list)
    (if (null? residual)
	list
	(let ((h (car residual)))
	  (if (or (and (odd? head) (odd? h))
		  (and (even? head) (even? h)))
	      (sub-same-parity (cdr residual) (cons h list))
	      (sub-same-parity (cdr residual) list)))))
  (cons head (sub-same-parity l ())))

したかったこと。

gosh> (same-parity 1 2 3 4 5 6 7)
(1 3 5 7)
gosh> (same-parity 2 3 4 5 6 7)
(2 4 6)

悩んだこと。下みたく変な出力になることがあった。回避するためにreverse使った。

gosh> (same-parity 1 2 3 4 5 6 7)
(1 ((() . 3) . 5) . 7)

ところでnullクラスはあるみたいだけど、gaucheにnilはないの?