1.序列的表示

序列

序列(表)是由一个个序对组合而成的,具体来说就是让每个序对的car部分对应这个链的条目,cdr部分则是下一个序对。

对于1->2->3->4这个序列我们可以表示为:

(cons 1
(cons 2
(cons 3
(cons 4 null)))) 注:null代表表尾

为了方便,上面的序列也可以通过(list 1 2 3 4)产生。

表操作

返回表中第n项:

  • n=0,返回表的char
  • n>0,返回表的cdr的第n-1项
(define (list-ref items n)
(if (= n 0)
(car items)
(list-ref (cdr items) (- n 1))))

返回表长度:

(define (length items)
(if (null? items)
0
(+ 1 (length (cdr items)))))

(define (length items)
(define (length-iter items n)
(if (null? items)
n
(length-iter (cdr items) (+ n 1))))
(length-iter items 0))

表的连接:

  • 如果list1是空表,结果就是list2
  • 否则先做出list1的cdr和list2的append,再将list1的car通过cons加到结果的前面。
(define (append list1 list2)
(if (null? list1)
list2
(cons (car list1) (append (cdr list1) list2))))

表的反转:

  • 如果items为空表,返回null
  • 否则返回(cdr items)的反转与(car items)的连接,因将(car items)看做是表中的一个元素(无论其本身是否为表),故在连接时要将其再次构造为表。
(define (reverse items)
(if (null? items)
null
(append (reverse (cdr items)) (list (car items)))))

对表的映射:

(define (map proc items)
(if (null? items)
null
(cons (proc (car items)) (map proc (cdr items)))))

最新文章

  1. R语言 ETL+统计+可视化
  2. ArcEngine选中面要素样式修改
  3. Windows校验文件哈希hash的两种常用方式
  4. spark对于elasticsearch里的复杂类型支持
  5. 将php配置为服务
  6. MySQL5.5 所支持的存储引擎
  7. Mac OS使用技巧之十六:系统失去响应怎么办?
  8. HBuilder之初体验
  9. JavaScript实例技巧精选(14)—动态变化背景颜色
  10. CNA, FCoE, TOE, RDMA, iWARP, iSCSI等概念及 Chelsio T5 产品介绍 转载
  11. Linux下编译安装redis
  12. 海量日志采集Flume(HA)
  13. MySQL基本操作命令
  14. CentOs 6.6里kdump启动失败的原因
  15. tomcat源码 分析 Catalina
  16. event.currentTarget指向事件所绑定的元素,而event.target始终指向事件发生时的元素
  17. J2EE与EJB
  18. 通过JS拦截 pushState 和 replaceState 事件
  19. javascript提取联通个人信息和通话记录的代码
  20. (原创)Windows下使用android ADT工具dmtracedump.exe绘图

热门文章

  1. cqrs案例
  2. 白鹭引擎 - 碰撞检测 ( hitTestPoint )
  3. [记录] Linux Apache隐藏index.php
  4. Vue.js——基于$.ajax实现数据的跨域增删查改
  5. vue格式化显示json数据
  6. CSS 点击事件
  7. 【BUG记录】记一次游戏越来越卡的BUG
  8. UnityHub破解
  9. MTIM(中间人攻击)
  10. 树莓派上的软件安装和卸载命令汇总 [ZT]