Gauche

7章を写経中

プログラミングGauche

プログラミングGauche

(letrec ((myeven? (lambda (n)
		  (cond [(= n 0) #t]
			[(> n 0) (myodd? (- n 1))]
			[else    (myodd? (+ n 1))])))
	 (myodd? (lambda (n)
		 (cond [(= n 0) #f]
		       [(> n 0) (myeven? (- n 1))]
		       [else    (myeven? (+ n 1))]))))
  (myodd? 2))

偶数か、奇数かを問い合わせる手続きを、
相互に呼び合うようにして判定するって、ちょっとおもしろい.

最初、無限に呼び合って戻ってこないじゃねと思ったが、
(- n 1) (+ n 1)はゼロに近づくようにして、
[(= n 0) #t] [(= n 0) #f]で、うまく判定しているんだね.