没有合适的资源?快使用搜索试试~ 我知道了~
coldnight#coldnight.github.com#Lisp列表处理1
需积分: 0 0 下载量 30 浏览量
2022-07-25
14:31:31
上传
评论
收藏 5KB MD 举报
温馨提示
试读
点对单元点对单元是构成列表的基本元素CONS用来创建点对单元, CONS接受两个实参并返回一个含有连个值的新点对单元.点对单元的两个值分别成为CAR和CDR,
资源推荐
资源详情
资源评论
Title: Lisp 学习笔记:列表处理
Date: 2013-03-37 15:57
Category: Lisp
Tags: Lisp, 列表, 学习, 笔记
## 点对单元
点对单元是构成列表的基本元素
*CONS*用来创建点对单元, CONS接受两个实参并返回一个含有连个值的新点对单元.
```lisp
(cons 1 2) --> (1 . 2)
```
点对单元的两个值分别成为*CAR*和*CDR*, 它们同时也用来访问两个值的函数名.
```lisp
(car (cons 1 2)) --> 1
(cdr (cons 1 2)) --> 2
```
*CAR*和*CDR*也能够支持*SETF*的位置
```lisp
(defparameter *cons* (cons 1 2))
*cons* --> (1 . 2)
(setf (car *cons*) 10) --> 10
*cons* --> (10 . 2)
(setf (cdr *cons*) 20) --> 20
*cons* --> (10 . 20)
```
## 列表
列表是通过将点对以链接状态链接在一起构成的.列表的元素被保存在点对的*CAR*中, 而后续的点对的链接则被保存在*CDR*中.链上最后一个单元的*CDR*为*NIL*
```lisp
(cons 1 nil) --> (1)
(cons 1 (cons 2 nil)) --> (1 2)
(cons 1 (cons 2 (cons 3 nil))) --> (1 2 3)
```
*LIST*函数可以在背后为你构建一些点对单元并将它们链接在一起
```lisp
(list 1) --> (1)
(list 1 2) --> (1 2)
(list 1 2 3) --> (1 2 3)
```
对列表而言*FIRST*和*REST*分别是*CAR*和*CDR*的同义词
```lisp
(defparameter *list* (list 1 2 3 4))
(first *list*) --> 1
(rest *list*) --> (2 3 4)
(first (rest *list*)) --> (2)
```
因为点对单元可以保存任何类型的值, 所以也可以保存列表, 并且单一列表可以保存不同类型的对象
```lisp
(list "foo" (list 1 2) 10) --> ("foo" (1 2) 10)
```
因此列表可以用来表示任意深度与复杂堵的数
点击阅读更多
资源评论
虚伪的小白
- 粉丝: 21
- 资源: 321
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功