Common Lisp
文章平均质量分 78
XGamerR
If a game,must be over.
展开
-
ANSI Common Lisp译本笔记1
第二章 welcome to lisp函数调用是一般用()包裹,第一个参数为函数名,后面的参数为实参。如:加法:(+ 1 2) → 3此种表示法为前序表示法。CLISP的求值方式:1.先对参数从左到右求值,函数符号求值则为函数体,实参符号求值则为实参值2.将实参值应用到函数体中,用于求出最终的值并返回。特殊的操作符:quote,其并不是按照上面的求值原创 2017-09-21 13:49:34 · 394 阅读 · 0 评论 -
Windows下Lisp环境搭建
需要工具:emacs、SBCL、Slimeemacs下载地址:http://ftp.gnu.org/gnu/emacs/windows/emacs26百度云地址:https://pan.baidu.com/s/1ohu7tKnKgDIYPj5PFPxRNw 密码:vme1SBCL下载地址:http://www.sbcl.org/platform-table.htmlSBCL百度云地...原创 2018-08-06 09:54:23 · 3192 阅读 · 0 评论 -
ANSI Common Lisp译本笔记9
Common Lisp 对象系统(CLOS)common lisp对象系统,简称为CLOS,是用一组用来实作面向对象编程的操作集。defclass:定义一个类格式:defclass 类名 () (字段))说明:字段又叫槽(slot),传给defclass的第三个参数必须是一个槽定义的列表。make-instance:实例化一个类,即创建一个类的实例。格式:make-原创 2017-10-12 14:03:21 · 395 阅读 · 0 评论 -
ANSI Common Lisp译本笔记8
宏求值eval:接收一个表达式,将其求值并返回。eval缺点:1.效率低,eval处理的是原始列表,要不当下编译它,或用直译器求值。这两种方法都比执行编译过来的代码慢。2.表达式在没有词法语境的情况下被求值。如:在let中调用eval,传给eval的表达式无法参照由let设置的变量。eval主要的作用是作为lisp的概念模型。函数coerce和com原创 2017-10-12 14:00:11 · 383 阅读 · 0 评论 -
ANSI Common Lisp译本笔记7
符号符号本身是以要一个对象所存在。一个符号可以用任何字符串作为名称,可通过调用symbol-name来获得符号的名字缺省情况下,common lisp在读入时,将符号名字所有的英文字母都转为大写,则表示缺省时不区分大小写。特殊语法用来参照符号:任何存在垂直杠(|)之间的字符序列被视为一个符号。在此种情况下读入的符号名不会转大写。宏字符和其他的字符被视为一般字符。若想用垂直杠(|原创 2017-10-12 13:50:07 · 428 阅读 · 0 评论 -
ANSI Common Lisp译本笔记6
输入输出common lisp有两种流:字符流、二进制流字符流流是用来表示字符来源与或终点的lisp对象。输入缺省是从*standard-input*流读取,输出缺省是在*standard-output*流。最初会在相同的地方:一个表示顶层的流。一个路径名是一种可携的方式来指定一个文件。一个路径名有6个部分:host、device、directory、name、原创 2017-10-12 13:47:04 · 394 阅读 · 0 评论 -
ANSI Common Lisp译本笔记5
函数fboundp:判断一个函数名是否有一个给定的符号。测试代码:CL-USER> (fboundp '+)Tsymbol-function:配置一个名字给一个函数。测试代码:CL-USER> (setf (symbol-function 'add2) #'(lambda (x) (+ x 2)))#CL-USER> (add2 1)3一般地,使用字符串作为函数的第原创 2017-10-12 13:17:49 · 336 阅读 · 0 评论 -
ANSI Common Lisp译本笔记4
控制流区块区块的基本操作符:progn、block、tagbodyprogn:对主体中的每个表达式依次进行求值,返回最后一个表达式的值。如:(progn (format t "a") (format t "b") (+ 1 1))输出为:ab23block:像一个带有名字及紧急出口的progn。第一个参数为符号。可在block中使原创 2017-10-12 08:32:23 · 597 阅读 · 0 评论 -
ANSI Common Lisp译本笔记3
特殊数据结构数组make-arry:构造一个数组,第一个参数为数组维度,若要指定多维数组,则此参数为一个列表。第二个参数为初始化值,可以使用关键字initial-element来指定全部初始值。如:(make-array 2 :initial-element nil)→(nil nil)一个一维数组含有两个nil值的元素。(make-array '(2 2) :init原创 2017-09-22 09:10:42 · 415 阅读 · 0 评论 -
Common Lisp译本笔记4之第五章 函数
所有的lisp程序的最基本的组成:函数、变量、宏。函数用宏defun定义格式:(defun 函数名 (形参列表) 函数体)如:(defun say (str) (format t "~A" str))约定:1、一般类型转换的函数会在名字中使用→2、将一个字符串转为微件(widget)的函数会叫做string->widget3、函数名中的连接符不是下划线,原创 2017-10-10 18:52:58 · 312 阅读 · 0 评论 -
Common Lisp译本笔记3之第四章 语法和语义
大多数编程语言,语言的处理器(无论是解释器或编译器)的操作方式都类似黑箱操作。在黑箱内部,语言的处理器通常分成子系统。一个典型的任务划分思路:将处理器分为三个阶段,每个阶段为下一个阶段提供内容。1、一个词法分析器将字符流分拆成语元并将其送进一个解析器2、解析器再根据该语言的语法在程序中构建一个表达式的树形表示。这棵树被称为抽象语法树。3、随即被送进一个求值器,求值器要么直接解释原创 2017-10-10 17:42:50 · 528 阅读 · 0 评论 -
Common Lisp译本笔记1之第二章 REPL简介
common lisp源文件扩展名一般为.lisp或.clemacs命令:C-c C-q调用:slime-close-parens-at-point。将插入必要数量的闭括号以匹配当前的所有开括号。emacs命令:C-c C-c可以编译光标所在的当前lisp代码emacs命令:C-c C-z可以回到REPL(lisp编译环境)emacs命令:在REPL原创 2017-10-10 17:41:13 · 398 阅读 · 0 评论 -
Common Lisp译本笔记2之第三章:简单的数据库实现(源码)
;;定义一个全局变量,用于存放数据(defvar *db* nil);;制作一个CD需要的信息(defun make-cd (title artist rating ripped) (list :title title :artist artist :rating rating :ripped ripped));;将一条CD信息记录到全局变量中(defun add-record原创 2017-10-10 15:00:55 · 313 阅读 · 0 评论 -
ANSI Common Lisp译本笔记2
第三章 列表(Lists)列表是Lisp的基本数据结构之一,在最早的Lisp中,是唯一的数据结构。cons真正做到事情是将两个对象结合成一个有两部分的对象。概念上来说,cons是一对指针,第一个是car,第二个是cdr将cons看成一个箱子,一部分是car,一部分是cdr,这种方式叫做箱子表示法,即和链表图一样。一个列表中的元素又是一个列表,这种属于嵌套列表。原创 2017-09-21 14:33:01 · 410 阅读 · 0 评论 -
Lisp的永恒之道
Lisp的永恒之道原文地址:http://www.cnblogs.com/weidagang2046/archive/2012/06/03/tao_of_lisp.htmlLisp之魅长久以来,Lisp一直被许多人视为史上最非凡的编程语言。它不仅在50多年前诞生的时候带来了诸多革命性的创新并极大地影响了后来编程语言的发展,即使在一大批现代语言不断涌现的今天,Lisp的诸多特性仍然未被超...转载 2018-08-01 18:08:50 · 199 阅读 · 0 评论