CLISP学习(一)
Lisp
Lisp发表于1960,是由数学家约翰·麦卡锡发明的。
在计算机有所发展时,数学家们对人工智能有着极大的兴趣,觉得可以实现一个共通的方法,使计算机能够处理链表中的符号数据,允许语言的处理、信息存入和检索、定理证明的过程机器化。
约翰·麦卡锡于1958年回到麻省理工,和Marvin Minsky组成了人工智能项目。开展一个表处理软件系统的工作,尔后推动了表处理语言LISP的诞生
lisp是世界上第二古老的程序语言,难以想象的是,这么多年过去了,它仍焕发生机,在人工智能上独具风骚。
安装
这里安装的是clisp,我的是Debain Linux
在Debian中:
sudo apt install clisp
在macOS中
使用 MacPorts
sudo port install clisp 或 使用 Homebrew
brew install clisp
在windows就上官网下载就好
函数式语言
LISP是函数式编程,所有的输入都被认为是函数,函数就要有函数名,参数和表达式。
(+ 1 2) 3
就比如上面这个,‘+’是一个 加法函数,1和2成为了这个函数的参数,(加法函数由于是lisp自带的基本函数,所以它的表达式(或者说计算式)早以被定义好了,所以咱们并没有看到它的计算式是什么样的)
这样就构成了一个表达式。回车返回3。
基本格式:(它可以接受很多参数)
(函数名 参数1 参数2 ...)
lisp 函数式语言 处理的是列表
Lisp 的基本形式是 表,基本单元是表达式,就比如上面这个,它就是一个列表,它的表达式由 加法函数+、参数‘1’、‘2’组成。
lisp嘛,List Processing --> 列表处理.
具体以后再说。
它是函数语言的同时,也是交互式语言(就像python一样)
在命令行中输入 clisp
$ clisp i i i i i i i ooooo o ooooooo ooooo ooooo
I I I I I I I 8 8 8 8 8 o 8 8
I \ `+' / I 8 8 8 8 8 8
\ `-+-' / 8 8 8 ooooo 8oooo
`-__|__-' 8 8 8 8 8
| 8 o 8 8 o 8 8
------+------ ooooo 8oooooo ooo8ooo ooooo 8 Welcome to GNU CLISP 2.49.93+ (2018-02-18) <http://clisp.org/> Copyright (c) Bruno Haible, Michael Stoll 1992-1993
Copyright (c) Bruno Haible, Marcus Daniels 1994-1997
Copyright (c) Bruno Haible, Pierpaolo Bernardi, Sam Steingold 1998
Copyright (c) Bruno Haible, Sam Steingold 1999-2000
Copyright (c) Sam Steingold, Bruno Haible 2001-2018 Type :h and hit Enter for context help. [1]>
你就可以像上面的 (+ 1 2)一样来试试,+ - * /
就比如
(/ 4 4 2 2)
结果发现什么?非常人性化的输出了1/4
当然还可以内嵌列表,如
[1]> (/ (- 4 7) (+ -1 6))
-3/5
求值
我们来理解一下表达式是如何被求值的。
在 Lisp 里, + 是函数,然而如 (+ 2 3) 的表达式,是函数调用。
当 Lisp 对函数调用求值时,它做下列两个步骤:
- 首先从左至右对实参求值。在这个例子当中,实参对自身求值,所以实参的值分别是
2跟3。- 实参的值传入以操作符命名的函数。在这个例子当中,将
2跟3传给+函数,返回5。
如果实参本身是函数调用的话,上述规则同样适用。以下是当 (/ (+ 2 4) (- 2 7)) 表达式被求值时的情形:
- Lisp 对
(+ 2 4)求值:2求值为2, 4 求值为 4 ,它们被传给函数 +,返回6。- Lisp 对
(- 2 7)求值: 2 求值为 2, 7求值为 7 ,它们被传给函数-,返回 -5 。- 数值
6与 -5 被传入函数/,返回 -6/5 。
但不是所有的 Common Lisp 操作符都是函数,不过大部分是。函数调用都是这么求值。由左至右对实参求值,将它们的数值传入函数,来返回整个表达式的值。这称为 Common Lisp 的求值规则。
CLISP学习(一)的更多相关文章
- clisp, scheme 和 clojure 初学习
clisp, scheme和clojure 初学习 1 clojure "clojure绝对会成为你的编程工具箱里的终极武器" "其他语言可能只是工具,但 Clojure ...
- Lisp学习--Windows下面的开发环境搭建
很久以前,就准备学习Lisp,但是遇到不少困难,社区太凌乱,也一直很犹豫,直到看了<Common Lisp - 想说爱你不容易>,想看看Common Lisp怎么样,之前都是拿Lisp的方 ...
- LISP学习-开发环境以及hello world
我想说说关于common lisp的开发环境问题,学习一个新的语言,如何最简单的搭建一个开发环境是至关重要的,它应该不让你在其他方面花费太多的精力,而只专注于学习语言本身. 其实我刚开始尝试的并不是c ...
- 学习Emacs系列教程
emacs最简单入门,只要10分钟 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 3 ...
- SWIG和PInvoke学习(1)
1. 简介 SWIG是个帮助使用C或者C++编写的软件能与其它各种高级编程语言进行嵌入联接的开发工具. SWIG能应用于各种不同类型的语言包括常用脚本编译语言例如Perl, PHP, Python, ...
- LISP语言学习资源
LISP的介绍:Paul Graham 的主页 http://paulgraham.com/index.html Lisp之根源 - 保罗·格雷厄姆 http://daiyuwen.freeshell ...
- 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代
2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...
- Angular2学习笔记(1)
Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...
- ABP入门系列(1)——学习Abp框架之实操演练
作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...
- 消息队列——RabbitMQ学习笔记
消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...
随机推荐
- 网页计时访问器application对象
网页计时访问器 application对象代表Web应用本身,整个Web共享一个application对象.开始于服务器打开结束与服务器关闭.在不同的浏览器打开j计时器仍然有作用.除非把服务器关闭 & ...
- Linux 文件操作接口
目录 Linux 文件操作接口 C语言文件操作接口 C语言文件描述 fopen() r模式打开文件 w模式打开文件 a模式打开文件 其他模式类似 fclose() fwrite() fread() 系 ...
- 齐博X1-栏目的调用2
fun('sort@fathers',$fid,'cms') 获取上层多级栏目这样的,比如我们现在所属第三级栏目,现在可以利用这个函数获取第二级和第一级的栏目,当然自身也会被调用出来,所以此函数用的 ...
- 驱动开发:内核测试模式过DSE签名
微软在x64系统中推出了DSE保护机制,DSE全称(Driver Signature Enforcement),该保护机制的核心就是任何驱动程序或者是第三方驱动如果想要在正常模式下被加载则必须要经过微 ...
- markdown第一天学习
Markdown学习 标题: 空格+标题名字后回车 二级标题 空格+标题名字后回车 三级标题 空格+标题名字后回车 四级标题 空格+标题名字后回车 字体 粗体 hello,world!------两边 ...
- 二十九、Helm常用命令
# 创建一个chart范例 helm create HELM-NAME # 检查chart语法 helm lint ./HELM-NAME # 使用默认chart部署到k8s helm install ...
- 重大发现,AQS加锁机制竟然跟Synchronized有惊人的相似
在并发多线程的情况下,为了保证数据安全性,一般我们会对数据进行加锁,通常使用Synchronized或者ReentrantLock同步锁.Synchronized是基于JVM实现,而Reentrant ...
- elasticsearch聚合之bucket terms聚合
目录 1. 背景 2. 前置条件 2.1 创建索引 2.2 准备数据 3. 各种聚合 3.1 统计人数最多的2个省 3.1.1 dsl 3.1.2 运行结果 3.2 统计人数最少的2个省 3.2.1 ...
- 1B踩坑大王
题目链接 题目大意: 人们常用的电子表格软件(比如: Excel)采用如下所述的坐标系统: 第一列被标为 A,第二列为 B,以此类推,第 262626 列为 Z.接下来为由两个字母构成的列号: 第 2 ...
- windows 使用ACR122U-A9设备读写M1卡
软件地址 M1卡服务程序 安装好驱动后就可以破解,破解成功后的秘钥会显示出来(记录下来),同级目录会生成一个dump文件,这个文件包含此M1卡的全部数据,可以使用hexedit打开,编辑或修改 Mif ...