SICP 习题 (2.3) 解题总结:用复合数据表示矩形

SICP 习题 2.3 要求我们实现一种平面矩形的表示,定义获取数据的相关选择函数。然后定义几个过程来计算矩形的周长和面积。

接着题目还要求我们实现矩形的另一种表示方式,要求这个新的矩形表示方式同样适用于以上定义的周长和面积计算过程。


有关这道题我们可以通过由上而下的方式进行实现,实现过程也不算复杂,原因是这道题涉及到的数学概念还是比较简单,就是矩形的面积和周长,差不多是我们小学的知识吧。不过题目后面要求我们实现矩形的不同表示方式,还要同时支持同一个计算周长和面积的过程,这点有些麻烦,实际上这道题有点偷跑了,涉及到的一些概念在本书的后面章节中才详细讲到。如果只是使用我们目前学习过的一些Scheme技术,实际上无法妥善的完成这道题目,只能部分实现。


我们先从最上层开始实现,首先是面积计算过程和周长计算过程。 


面积计算过程就是长乘以宽嘛,代码如下:


(define (area-rect rect)
  (* (get-length rect) (get-width rect)))

周长计算过程就是长加上宽,然后乘以2”,代码如下:

(define (perimeter-rect rect)
  (* 2 (+ (get-length rect) (get-width rect))))


通过以上过程我们就可以发现,我们需要实现的是get-lengthget-width两个过程,用于获取一个矩形的长和宽。


具体的get-length和get-width如何实现,又取决于我们的矩形数据结构如何实现。

我在下面列出我的第一种实现,实现的方式是通过矩形的两个顶点的坐标来定义一个矩形,代码如下:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值