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