SICP 习题2.5 2^a*3^b的cons car cdr过程

本文介绍了一种通过递归算法实现的计算cos-b的结果和从一个特定数值中提取a和b的方法。利用定义好的cons-b、car-b和cdr-b函数,通过不断除以2和3来获取a和b的值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

计算cos-b的结果就是2a3b的数值
(car-b z)就是将z不断除2,就可以得到a,同理可以得到b
因为2,3互质,所有整除的时候不会影响
(define cons-b
  (lambda (x y)
    (cond ((and (> x 0) (> y 0)) (* 6 (cons-b (- x 1) (- y 1))))
      ((> x 0) (* 2 (cons-b (- x 1) y)))
      ((> y 0) (* 3 (cons-b x (- y 1))))
      (else 1))))

(define car-b
  (lambda (x)
    (if (= (remainder x 2) 0) (+ 1 (car-b (/ x 2))) 0)))

(define cdr-b
  (lambda (x)
    (if (= (remainder x 3) 0) (+ 1 (cdr-b (/ x 3))) 0)))

(define z (cons-b 3 2))

(newline)
(display (car-b z))
(newline)
(display (cdr-b z))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值