文档章节

【SICP练习】111 练习3.24

NoMasp
 NoMasp
发布于 2015/09/08 21:52
字数 319
阅读 7
收藏 0

练习3-24

原文

Exercise 3.24. In the table implementations above, the keys are tested for equality using equal? (called by assoc). This is not always the appropriate test. For instance, we might have a table with numeric keys in which we don’t need an exact match to the number we’re looking up, but only a number within some tolerance of it. Design a table constructor make-table that takes as an argument a same-key? procedure that will be used to test “equality” of keys. Make-table should return a dispatch procedure that can be used to access appropriate lookup and insert! procedures for a local table.

代码

(define (make-table same-key?) (let ((local-table (list '*table*))) (define (lookup key-1 key-2) (let ((subtable (assoc key-1 (cdr local-table)))) (if subtable (let ((record (assoc key-2 (cdr subtable))) (if record (cdr record) false)) false))) (define (insert! key-1 key-2 value) (let ((subtable (assoc key-1 (cdr local-table)))) (if subtable (let ((record (assoc key-2 (cdr subtable)))) (if record (set-cdr! record value) (set-cdr! subtable (cons (key-2 value) (cdr subtable))))) (set-cdr! local-table (cons (list key-1 (cons key-2 value)) (cdr local-table))))) 'ok) (define (assoc key records) (cond ((null? records) false) ((same-key? key (caar records)) (car records)) (else (assoc key (cdr records))))) (define (dispatch m) (cond ((eq? m 'lookup-proc) lookup) ((eq? m 'insert-proc!) insert!) (else (error "Unknown operation -- TABLE" m)))) dispatch))



感谢访问,希望对您有所帮助。 欢迎关注或收藏、评论或点赞。


为使本文得到斧正和提问,转载请注明出处:
http://blog.csdn.net/nomasp


版权声明:本文为 NoMasp柯于旺 原创文章,未经许可严禁转载!欢迎访问我的博客:http://blog.csdn.net/nomasp

本文转载自:http://blog.csdn.net/nomasp/article/details/44648285

NoMasp
粉丝 7
博文 334
码字总数 0
作品 0
镇江
程序员
私信 提问
GNOME 3.24 发布,新增 Night Light 模式

GNOME 3.24,GNOME 3 的最新版本现在发布了。新版本引入了已升级的平台和应用程序,包括一些主要的新功能和增强,以及许多较小的改进和 bug 修复。3.24 代表了 GNOME 的另一种进步,同时也为...

局长
2017/03/23
3.7K
28
PHP 虚拟机 HHVM 3.24 正式发布:不再支持 PHP 5

HHVM 3.24 终于发布了,此版本包含新功能、错误修复、性能改进和对未来改进的支持工作。值得注意的是,HHVM 3.24 是支持 PHP 5 的最后一个版本,这包括对 PHP 5 扩展()的源码级别兼容性。官方...

局长
2018/01/17
3.7K
12
GNOME 的新夜灯功能旨在帮助你睡得更好

先来接受互联网知识(合理的科学)的洗礼,明亮的屏幕,如你现在正在盯着的屏幕,发出的蓝色的光,对我们的睡眠会有影响。 我们许多人使用蓝光滤光片来降低我们接受到的蓝光量,以提高快速入...

局长
2017/03/06
1K
7
HHVM 3.23 发布,高速的 PHP 执行引擎

HHVM 3.23 已发布,此版本包含新功能、错误修复、性能改进和支持未来改进的工作。 有以下值得关注的更新: optional shape fields 现在与 nullable shape fields 不同,有关帮助迁移的详细信...

局长
2017/11/21
2K
4
Ubuntu 17.04 Beta 1 发布,现可下载

Ubuntu 17.04 Beta 1 发布了。 Ubuntu Budgie,Ubuntu GNOME 和 Xubuntu 是参与这次测试的社区风格之一。 Ubuntu 的常规版本,即大家希望看到的版本将会参加第二个 beta 版。 要详细了解测试...

局长
2017/02/24
4.2K
16

没有更多内容

加载失败,请刷新页面

加载更多

OpenStack 简介和几种安装方式总结

OpenStack :是一个由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenSta...

小海bug
昨天
5
0
DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
昨天
6
0
数据库中间件MyCat

什么是MyCat? 查看官网的介绍是这样说的 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务、ACID、可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵...

沉浮_
昨天
6
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
昨天
7
0
常用物流快递单号查询接口种类及对接方法

目前快递查询接口有两种方式可以对接,一是和顺丰、圆通、中通、天天、韵达、德邦这些快递公司一一对接接口,二是和快递鸟这样第三方集成接口一次性对接多家常用快递。第一种耗费时间长,但是...

程序的小猿
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部