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个基本的消息发送/接收模型, ...
随机推荐
- HTML+CSS基础知识(2)选择器的使用、盒子模型的讲解、列表的使用
文章目录 1.CSS基础知识 2.css样式 2.1.代码: 2.2 测试结果 3.CSS的语法 3.1 代码 4.块元素和行内元素 4.1 代码 4.2 测试结果 5.常用的选择器 5.1 代码块 ...
- 齐博x1会员中心菜单权限显示
会员中心的菜单可以通过后台设置用户组权限进行显示或者是隐藏.比如商城里的菜单如下: 菜单文件是:\application\shop\member_menu.php return array( 'cms ...
- 齐博x1细节优化,自定义二、三、四维字段支持自定描述
如下图所示,之前自定义字估中的二.三.四维字段,不支持自定义描述,导致用户输入的时候,不知道该输入什么信息内容.只有站长自己才知道. 现在支持自定义描述,及设置文本或数字.方便引导用户输入相应的信息内 ...
- 8.pygame-定时器
使用定时器添加敌机 游戏启动后,每隔一秒出现一架敌方飞机 每架飞机向屏幕下方飞行,速度各不相同 没加敌机出现的水平位置也不进相同 当敌机从屏幕下方飞出,不会再飞回到屏幕中 定时器 pygame中使 ...
- 1.pygame快速入门-创建游戏窗口
简介 pygame是python一个包,专为电子游戏设计#安装 pip3 install pygame #验证安装 # aliens 是pygame内置的一个小游戏,可以启动成功说明pygame安 ...
- Pytorch模型量化
在深度学习中,量化指的是使用更少的bit来存储原本以浮点数存储的tensor,以及使用更少的bit来完成原本以浮点数完成的计算.这么做的好处主要有如下几点: 更少的模型体积,接近4倍的减少: 可以更快 ...
- Spring Retry 重试
重试的使用场景比较多,比如调用远程服务时,由于网络或者服务端响应慢导致调用超时,此时可以多重试几次.用定时任务也可以实现重试的效果,但比较麻烦,用Spring Retry的话一个注解搞定所有.话不多说 ...
- webgl(three.js)3D光伏,3D太阳能能源,3D智慧光伏、光伏发电、清洁能源三维可视化解决方案——第十六课
序: 能源是文明和发展的重要保障,人类命运不可避开的话题,无论是战争还是发展,都有它存在的身影.从石器时代到现代文明,人类的能源应用在进步,也在面临能源枯竭的危机与恐惧,而开发与应用可再生能源才是解决 ...
- JavaWeb3
1. 会话技术 会话:一次会话中包含多次请求和响应 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止 功能:在一次会话的范围内的多次请求间共享数据 方式: 客户端会话技术:Co ...
- JAVA-注解之 TODO、FIXME、XXX
TODO.FIXME.XXX //TODO : 表示待实现的功能 //FIXME: 代码存在Bug,不能Run或运行结果不正确,需要修复 //XXX : 勉强可以工作,但是实现的方 ...