# LISP公理——七个原始操作符

  我们先定义表达式。表达式或是一个原子(atom),它是一个字母序列(如 foo),或是一个由零个或多个表达式组成的表(list),表达式之间用空格分开,放入一对括号中。
以下是一些表达式:

foo
()
(foo)
(foo bar)
(a b (c) d)

  最后一个表达式是由四个元素组成的表,第三个元素本身是由一个元素组成的表。

  在算术中表达式 1 + 1 得出值正确的Lisp表达式也有值。

  如果表达式e得出值v,我们说e返回v。

  下一步我们将定义几种表达式以及它们的返回值。

  如果一个表达式是表,我们称第一个元素为操作符,其余的元素为自变量。

  接下来将定义七个原始(从公理的意义上说)操作符:
  quote、atom、eq、car、cdr、cons和cond。

1.(quote x)

  返回x。为了可读性我们把(quote x)简记 为’x。

$ (quote a)
a
$ 'a
a
$ (quote (a b c))
(a b c)

2.(atom x)

  返回原子t。如果x的值是一个原子或是空表,否则返回()。
  在Lisp中,我们按惯例用原子t表示真,而用空表表示假。

$ (atom 'a)
t
$ (atom '(a b c))
()
$ (atom '())
t

  既然有了一个自变量需要求值的操作符,我们可以看一下quote的作用。
  通过引用(quote)一个表,我们避免它被求值。
  一个未被引用的表作为自变量传给像atom这样的操作符将被视为代码:

$ (atom (atom 'a))
t

  反之一个被引用的表仅被视为表,在此例中就是有两个元素的表:

$ (atom '(atom 'a))
()

  这与我们在英语中使用引号的方式一致。

  Cambridge(剑桥)是一个位于麻萨诸塞州有90000人口的城镇,而“Cambridge”是一个由9个字母组成的单词。

  引用看上去可能有点奇怪,因为极少有其它语言有类似的概念。它和Lisp最与众不同的特征紧密联系:代码和数据由相同的数据结构构成,而我们用quote操作符来区分它们。

3.(eq x y)

  返回t如果x和y的值是同一个原子或都是空表,否则返回()。

$ (eq 'a 'a)
t
$ (eq 'a 'b)
()
$ (eq '() '())
t

4.(car x)

  期望x的值是一个表并且返回x的第一个元素。

$ (car '(a b c))
a

5.(cdr x)

  期望x的值是一个表并且返回x的第一个元素之后的所有元素。

$ (cdr '(a b c))
(b c)

6.(cons x y)

  期望y的值是一个表并且返回一个新表,它的第一个元素是x的值,后面跟着y的值的各个元素。

$ (cons 'a '(b c))
(a b c)
$ (cons 'a (cons 'b (cons 'c '())))
(a b c)
$ (car (cons 'a '(b c)))
a
$ (cdr (cons 'a '(b c)))
(b c)

7.(cond (…) …(…))

  它 的求值规则如下:

  p表达式依次求值直到有一个返回t。

  如果能找到这样的p表达式,相应的e表达式的值作为整个cond表达式的返回值。

$ (cond ((eq 'a 'b) 'first)((atom 'a)  'second))
second

  当表达式以七个原始操作符中的五个开头时,它的自变量总是要求值的。

  我们称这样的操作符为函数。

LISP公理——七个原始操作符相关推荐

  1. common lisp里的几个操作符

    setf  赋值操作符,定义一个全局变量.返回值是最后一个赋值的结果. let 局部变量操作符.let表达式有两部分组成.第一部分是任意多的变量赋值,他们被包裹在一个()中,第二部分是任意数量的表示式 ...

  2. 105-网络编程——第七章原始套接字编程(上)

    1.原始套接字是允许访问底层传输协议的一种套接字类型,提供了普通套接字所不具备的功能,能够对网络数据包进行某种程度的控制操作 因此原始套接字通常用于开发简单网络性能监视程序以及网络探测.网络攻击 2. ...

  3. 奇数项求和公式_Excel公式求和奇数或偶数周

    奇数项求和公式 Here's an Excel formula challenge for you, based on an email question that someone sent to m ...

  4. python onehot_Python中的标签编码器和OneHot编码器

    python onehot Machine Learning algorithms understand the numbers and not texts. Hence, all the " ...

  5. lisp语言(转自百度)

    lisp语言 Lisp 语言最早是在 20 世纪 50 年代末由麻省理工学院(MIT)为研究人工智能而开发的.Lisp 语言的强大使它在其它方面诸如编写编辑命令和集成环境等显示其优势.而 GNU Em ...

  6. 【整理】LISP简介

    张老师一直强调AutoCAD的开发有3种接口,vba,lisp,objectarx.objectarx功能强大,但学起来比较难.而vba和lisp就相对简单了.而且到时候用objectarx作出来的程 ...

  7. matlab lisp,LISP-12953284-51CTO博客

    Lisp,最初被拼为LISP,一个历史悠久的电脑编程语言家族.最早由约翰·麦卡锡在1958年基于λ演算创造,演化至今,是历史第二悠久的高级语言,仅次于Fortran,也是第一个函数式编程语言. 其名称 ...

  8. lisp不是函授型语言_lisp语言的定义

    展开全部 约翰麦卡锡定义lisp 当然早已有了各种计算模型--最著名的是图32313133353236313431303231363533e4b893e5b19e31333361303032灵机. 但 ...

  9. lisp把选集转成表_LISP(表处理语言)

    Lisp的表达式是一个原子(atom)或表(list),原子(atom)是一个字母序列,如abc:表是由零个或多个表达式组成的序列,表达式之间用空格分隔开,放入一对括号中,如: abc () (abc ...

最新文章

  1. 判定设备_盐雾腐蚀试验判定标准
  2. Lnmp安装与配置笔记
  3. Web组件 – 构建商业化应用的基石
  4. java websocket修改为同步_服务端向客户端推送消息技术之websocket的介绍
  5. 双目测距数学原理详解(转载)
  6. 麦步手表编程纪实(1)
  7. 在cell中自定义分割线的小技巧
  8. 京瓷1020手动双面打印提示_自动双面打印时纸张是如何被翻转的?
  9. Flutter 实现 仿Android原生启动模式SingleTask
  10. win32asm写的红警2的修改器
  11. dubbo源码分析第七篇一服务暴露第三小节一远程暴露内核剖析
  12. namesilo如何使用BTC支付:
  13. python控制苹果手机触摸屏失灵怎么办_苹果手机触摸屏失灵的各种解决方法
  14. 决定重新安装windows2016datacenter 系统。原先的俄罗斯版没虚拟机功能
  15. 全景声制作软件 Spat Revolution 最新更新 v20.12
  16. 2022-2028全球纳秒光纤激光器行业调研及趋势分析报告
  17. 7个视频素材网站,不用再为素材发愁
  18. Android.bp 添加宏开关
  19. 有苦有乐的算法 --- 一个无序数组,如果从小到大排好序,任何一个元素任何一个元素移动索引长度不超过k,实现排序
  20. 树莓派4b署filebrowser+aria2

热门文章

  1. 嵌入式驱动编写-LCD驱动程序
  2. OpenMV:14巡线小车
  3. PHP有限内存处理大文件(从两个文件提取相同行)
  4. 电子货架标签多种固定方式
  5. 投票助力源码_微信投票助手源码
  6. 将文件夹中的png、wegb图片全部转换为jpg图片
  7. python scipy.misc.imread_scipy.misc.imread()函数解析
  8. HTML学生中秋节日网页设计模板 DIV布局大学生中秋节网页作业制作 八月十五中秋静态网页成品代码下载 中秋节日网页设计作品...
  9. 超详细的水果FL Studio21最新版更新全功能详细介绍!80项更新与改进!
  10. 图像对抗生成网络 GAN学习01:从头搭建最简单的GAN网络,利用神经网络生成手写体数字数据(tensorflow)