lisp构造表
CONS 操作符
我们刚刚学习了如何拆分一个表,现在学习如何合并一个表。 CONS 操作符就是做这件事情的。
假设有一个列表 (1 2 3) ,我们做一下 CAR 操作:
(car '(1 2 3))
返回 1 。
我们再做一下 CDR 操作:
(cdr '(1 2 3))
返回 (2 3) 。
CONS 操作符的作用就是将拆开的表连起来。
(cons 1 '(2 3))
返回的将是原来的列表 (1 2 3) 。
S 表达式
cons 操作符的第二个参数要是一个列表,才能返回一个列表。否则:
(cons 2 3)
返回
(2 . 3)
这次中间有一个点。为什么呢?
因为,表实际上是一个树(二叉树)。我们上面所用到的带括号的式子被称为 S表达式。而在S表达式中, 二叉树在表示为 (Left . Right) 。
如果左支是一个表,则就会成为如下形式。
((List) . Right)
如果右支是一个表,当然也可以表示为 (Left . (List)) ,但是此时我们一般把点省略掉,写成
(Left List)
你现在可能有些晕,用一段表达式表示就很清晰了,如下
'(3 . (2 3))
(3 2 3)
CONS操作符的作用是将两棵树连接成一棵树。
那么现在你能回答为什么CDR操作符会取出除第一个外的所有元素了吗,因为它的实质是取二叉树的右支。
总之CONS操作符的作用是连接一个元素与一个表(顺序不可颠倒)。
(cons 2 '(2 3))
(2 2 3)
如果要连接三个或以上的元素,要这样
(cons 1 (cons 2 '(3)))
(1 2 3)
真正有点实质性的是这个式子
(cons 1 (cons 2 (cons 3 nil))) ;;; (1 2 3) (cons 3 nil) ;;; (3)
如果二叉树的右支是NIL,那么连NIL都省略掉。如
'(3 . Nil) ;;; (3)
一件有趣的事情是这样
(cdr '(3)) ;;; NIL
append 函数
append函数的作用是连接两个表。
>(append '(3 3) '(4 4)) (3 3 4 4)
形象点说,它会把最外一层括号去掉,然后连接。比如
>(append '((3)) '(4 4)) ((3) 4 4)
LIST 函数
LIST 函数的意义是将所有的参数放入一个表中并返回之。
>(list 1 1 1 1) (1 1 1 1) >(list '(2 3) '(2) 1 2) ((2 3) (2) 1 2)
转自:http://zh.wikibooks.org/wiki/Lisp_%E5%85%A5%E9%96%80/%E7%AC%AC%E4%B8%89%E7%AB%A0_%E6%A7%8B%E9%80%A0%E8%A1%A8
关于dot notation的详细说明:
lisp构造表的更多相关文章
- CSS构造表单
结构化表单布局 <head> <meta http-equiv="Content-Type" content="text/html; charset=G ...
- 《how to design programs》13章用list构造表
使用cons构造一个包含多个元素的表十分麻烦,因此scheme提供了list操作,该操作接受任意量的值作为输入以创建一个表,下面是扩展的语法: <prm>=list 扩展的scheme值的 ...
- 26 , CSS 构造表单
1. 表单标签使用 2. 下拉菜单背景 3. 滚动条的使用 4. 结构化表单布局 1 1 1 1. . . . 表单标签的使用 <label for=”name”>姓名: <inpu ...
- 【Visual Lisp】表处理专题
表处理大全;;★★★01.创建表★★★(setq lst '());;创建一个空表(list 1 2 3 4) '(1 2 3 4) ;;构造表的两种形式(vl-list* 1 "TT&qu ...
- RavenScheme简介
RavenScheme简介 RavenScheme使用了一个运行『读入-求值-打印』循环的解释器.该解释器从标准输入反复的读入表达式,对得到的表达式求值,然后打印出结果. 如果用户键入: [加 1 2 ...
- Scheme语言--简单介绍
一年前事实上有时间看完SICP这本书,后来由于种种原因,一直没有继续再学.由于SICP中使用Scheme确实应用不多.在Java,C++的语言眼里,Scheme确实非常另类.现在MIT已经放弃了使用S ...
- Scheme语言实例入门--怎样写一个“新型冠状病毒感染风险检测程序”
小学生都能用的编程语言 2020的春季中小学受疫情影响,一直还没有开学,孩子宅在家说想做一个学校要求的研究项目,我就说你做一个怎么样通过编程来学习数学的小项目吧,用最简单的计算机语言来解决小学数学问题 ...
- MySQL索引原理及慢查询优化
原文:http://tech.meituan.com/mysql-index.html 一个慢查询引发的思考 select count(*) from task where status=2 and ...
- (转)MySQL索引原理及慢查询优化
转自美团技术博客,原文地址:http://tech.meituan.com/mysql-index.html 建索引的一些原则: 1.最左前缀匹配原则,非常重要的原则,mysql会一直向右匹配直到遇到 ...
随机推荐
- 【转】Android源码下载过程的一些注意事项
原文网址:http://www.360doc.com/content/14/0113/11/11948835_344809459.shtml 其它一些事项说明: 1.在源代码下载过程中,我们在源代码下 ...
- jquery 自动跳出列表
先上效果图:当鼠标经过相亲会自动弹出取最新的10条数据
- Appstore 创建App步骤
.进入AppInformation界面 defaultLanguage:选择默认语言 AppName:填写在Appstore上显示的名字 SKUNumber:填写一个唯一标示符,这个只要唯一即可,不能 ...
- Jenkins动态部署方案
在之前一个项目开发中使用到了jenkins自动化测试,根据实际应用,简单整理了其部署方案. 1.部署 2.项目构建 3.重部署 1 部署 登录Jenkins应用管理界面 1)选中一个服务器上已在jen ...
- ARM9嵌入式学习笔记(1)-Linux命令
ARM9嵌入式学习笔记(1)-Linux命令 实验1-1-2 Linux常见命令使用 添加用户useradd smb; 设置账户密码passwd smb; 切换用户su - root 关机命令shut ...
- [跟我学spring学习笔记][IoC]
IoC基础 什么是IoC Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想. ioc做什么 IoC容器帮对象找相应的依赖对象并注入,而不是由对象主动去找 ...
- html_day3
总结学习html的第一天 表格的结构说明 <table></table> <tr></tr> <td></td> <th& ...
- Javascript进阶篇——( JavaScript内置对象---下)--Array数组对象---笔记整理
Array 数组对象数组对象是一个对象的集合,里边的对象可以是不同类型的.数组的每一个成员对象都有一个“下标”,用来表示它在数组中的位置,是从零开始的数组定义的方法: 1. 定义了一个空数组: var ...
- Visual Studio 2013 Web开发、新增功能:“Browser Link”
微软正式发布Visual Studio 2013 RTM版,微软还发布了Visual Studio 2013的最终版本..NET 4.5.1以及Team Foundation Server 2013. ...
- “有箭头的视图”,即程序的Storyboard Entry Point。
设置方法很简单:打开StoryBoard文件,选中要设置为第一视图的ViewController,在右边工具栏勾选Is Initial View Controller就好了,此时你会看到ViewCon ...