以下の内容はhttps://kiririmode.hatenablog.jp/entry/20071103/p3より取得しました。


問題2-5

データ抽象化するけど、pairを構成する方法として2^a3^bで記憶する方法とかあるからやってみな、この低脳!みたいなことがかかれてたのでがんばってみます。

(define (cons x y)
  (* (expt 2 x) (expt 3 y)))

構成子は問題のままです。(expt x y)は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



以上の内容はhttps://kiririmode.hatenablog.jp/entry/20071103/p3より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14