データ抽象化するけど、pairを構成する方法としてで記憶する方法とかあるからやってみな、この低脳!みたいなことがかかれてたのでがんばってみます。
(define (cons x y) (* (expt 2 x) (expt 3 y)))
構成子は問題のままです。(expt x y)はを返してくれるイカしたやつです。
あとはaとbを取り出してくれるヤツ書けばいいんだけど、a取り出すには2で余りがでるまで割りまくったらいいんですよね!
(define (car z) (define (car-sub x cnt) (if (= (remainder x 2) 0) (car-sub (/ x 2) (+ cnt 1)) cnt)) (car-sub z 0))
b取り出すのもほとんどおなじ。
(define (cdr z) (define (cdr-sub x cnt) (if (= (remainder x 3) 0) (cdr-sub (/ x 3) (+ cnt 1)) cnt)) (cdr-sub z 0))
こんな感じです!
gosh> (define z (cons 10 9)) z gosh> (car z) 10 gosh> (cdr z) 9