lisp
文章平均质量分 79
ryuali2010
这个作者很懒,什么都没留下…
展开
-
lisp 函数(一)
一:定义新函数1:(defun name (parameter*)"optional documentation string"Body-form*)Name: 可以是任何包含字典字符和连字符(不是下划线)Remark:一个字符串紧跟在形参列表之后,它应该是描述函数用途的文档字符串,定义时被关联到函数名,以后可用DOCUMENTATION来调用。Body:可以由任何数量原创 2012-07-19 16:38:19 · 2939 阅读 · 1 评论 -
lisp 函数(三)
一:function builderCompose1:Lambda中args是对外面的一个接口,本身这个函数会返回一个lambda,然后传给apply fn1 所以fn1将决定传入什么格式的实参。本例sqrt只能是接受一个参数,并且因为最后面是一个列表形式,所以需要用mapcar 把他们拆分开。2:最里面的函数的返回值必须符合下一个函数的参数个数。如sqrt 返回一个值,而roun原创 2012-08-01 02:29:29 · 1502 阅读 · 0 评论 -
文件I/O
Common Lisp 为读写数据提供了一个流的抽象和一个称为路径名(pathname)的抽象,他们以一种跟操作系统无关的方式来管理文件特有:读写S表达式S基本元素是列表和原子(非列表或空列表),列表是括号包围,并且包含任意数量的以空格分开的元素。我们平常说的列表(1 2 3)就是一个S表达式。一:读取文件数据Open 基于字符的输入流,你可以将它传给函数以便读取一个或多个字符。你原创 2012-07-23 20:10:27 · 1424 阅读 · 0 评论 -
哈希表
与提供整数索引的向量/数组相比,哈希表允许你使用任何对象作为索引或是键(key).现在键可以是一个字符串,一个函数对象等等。Make-hash-table创建哈希表,默认是按eql进行键值的等价。除了一种情况,就是如果当使用字符串进行匹配的时候。这个时候就需要由:test进行设定了。注意在这里的:test只能是接受四个值:eq,eql,equal,equalp函数Gethash 提供了原创 2012-07-21 11:53:32 · 364 阅读 · 0 评论 -
structure
一:结构体的构造A structure can be considered as a deluxe(豪华版) kind of vector.we use defstruct .we just give the name of the structure and the names of the fields。CL-USER> (defstruct point x y原创 2012-07-29 17:02:25 · 583 阅读 · 0 评论 -
集合
The preceding chapter discussed the list, Lisp's most versatile data structure.arrays (including vectors and strings), structures, and hash tables. They may not be as flexible as lists, but they can原创 2012-07-21 11:50:35 · 386 阅读 · 0 评论 -
Using recursion
from ANSI Common lisp p-114Recursion plays a greater role in Lisp than in most other languages. There seem to be three main reasons why: 1. Functional programming. Recursive algorithms are le转载 2012-08-01 09:11:44 · 418 阅读 · 0 评论 -
Regexp -WiKi
字符描述\将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,“n”匹配字符“n”。“\n”匹配一个换行符。串行“\\”匹配“\”而“\(”则匹配“(”。^匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性,^也匹配“\n”或“\r”之后的位置。$匹配输入字符串的结束位置。如果设置了转载 2012-08-25 22:22:55 · 477 阅读 · 0 评论 -
Meta-Character and regexp
Regular expressions use meta-characters. The shells also have meta-characters.Meta-characters are simply characters that have a special meaning.The problem occurs when you want to use a regular expres原创 2012-08-25 18:55:54 · 646 阅读 · 0 评论 -
find / ls / grep /Emacs regexp 区别 及Meta
1:文件名的生成在Linux中有很多适用文件作为命令参数,我们可以通过通配符进行文件名的生成。注意[...]形式,是取出其所列范围中的一个,然后只要符合就行。注意ls / find 与 grep 中的通配符是有区别的,因为前两个命令都是针对文件名 而grep是针对的文件中内容的匹配。下面这个列表是针对文件名匹配的时候的匹配模式* 在文件名匹配表示的是匹配任何数量的字符或字符串,而不原创 2012-08-15 18:41:43 · 1378 阅读 · 0 评论 -
浅谈lisp与shell中转义字符和正则表达 (二)
正则表达式:我们应该也都了解一些正则表达式在Unix shell中的用法,但是还是有点区别,it is similar to those used by the language Perl, editors like ed and vi and Unix software tools like lex and grep.program.* 在Emacs中表示以program开头的程序,而在Un原创 2012-08-25 10:47:21 · 2628 阅读 · 0 评论 -
浅谈lisp与shell中转义字符和正则表达 (一)
转义本身包含两个层次的含义:特殊字符--> 普通字符 普通字符-->具有特殊含义。转义字符为\具有特殊含义的元字符"" "$" "\" "|" "&" "*" "?" ,可以通过转义字符\,单引号,双引号使它去掉特殊含义。普通字符通过转义字符具有特殊含义,\n 表换行。\e 表esc字符对于string的值,它会在碰见\的时候,将有特殊含义的字符转义为一原创 2012-08-15 18:43:20 · 2423 阅读 · 0 评论 -
windows中emacs+ slime+ sbcl 配置
折腾我这么多天,终于把这个环境给弄好了,主要是刚开始完全没有头绪,如今发现下面的描述,真是看的人郁闷啊,让我情何以堪。如此简单却让我纠结了好几天,刚开始一直用emacs来编写,但是到了数组那一章,当用到make-array 的时候他就是报错说:没有这个函数,我当时就想肯定是我什么地方没有设置对,或者其他原因,因为这个是函数的问题,应该是哪个包没有包含进来,最终我在网上看到说要用emacs+sbcl原创 2012-07-18 13:36:36 · 3964 阅读 · 1 评论 -
Regexp
Remember that shell meta-characters are expanded before the shell passes the arguments to the program. To prevent this expansion, the special characters in a regular expression must be quoted when pas原创 2012-08-25 21:52:59 · 375 阅读 · 0 评论 -
lisp format总结
1: 基本格式化(format destination control-string &rest format-arguments)(输出目的 控制字符串 格式化参数) @,冒号 --> 修饰符 ~A,~D -->控制字符串 V,#,十进制数字 --> 前置参数 (关键是寻找到底是用一个子句) ~A/~S 都可以使用任何类型的格式化参数,~S试图原创 2012-07-18 11:42:25 · 2997 阅读 · 0 评论 -
Emacs
MinibufferC-x ^ make it taller in the normal fashioncompletion commands in minibuffer TAB/SPC/RET/?? (minibuffer-list-completions)TAB (minibuffer-complete).SPC原创 2012-07-18 13:40:09 · 621 阅读 · 0 评论 -
标准控制结构
一:BlockCommon Lisp has three basic operators for creating blocks Of code: progn, block, and tagbody.blockA block is like a progn with a name and an emergency exit At any point within the bod原创 2012-07-20 07:26:08 · 467 阅读 · 0 评论 -
PGM格式图像详解
自:http://blog.csdn.net/xiaoxin_ling/article/details/3980642NET framework框架类库中的Image类和Bitmap类提供了常用图像格式的解析读取和存储,这些常用格式包括BMP,JEPG,GIF,PNG,EXIF,TIFF.但是可惜的是不支持PGM格式,但是只要知道了PGM格式的文件的组织结构,相信要解析他也不是难事了.转载 2012-07-28 19:23:43 · 22763 阅读 · 2 评论 -
append/cons car/cdr reduce
理解列表的关键是理解点对单元,虽然只要是点对单元都需要用括号引用起来,但是我们平常说的list是特指那些:后面的位置我们不直接存字面值了,改为地址,比如下一个点对的引用,所以当CDR为后续点对的链接或NIL时,Lisp打印器可以理解这种约定并能将这种链状的点对单元打印成括号列表而不用用点分隔的点对。注意第二个与第四个的形式区别与原因。一:append/conscons原创 2012-07-30 16:28:39 · 875 阅读 · 0 评论 -
lisp 语法与语义
Common lisp 定义了两个黑箱,一个将文本转化成lisp对象,而另一个则用这些对象来实现语言的语义。前一个箱子称为读取器,后一个称为求值器。读取器理解:S-表达式求职器理解:Lisp表达式语法S-表达式:基本元素列表(list)和原子(atom),列表由括号所包围,并可包含任何数量的由空格所分隔的元素。数字和字符串都是自求值另一自求值符号是关键字符号--以名字冒原创 2012-07-18 17:56:53 · 1179 阅读 · 0 评论 -
使用hunchentoot搭建lispweb 服务器
转自:http://blog.csdn.net/keyboardota/article/details/7654512很多人学习Lisp的时候都觉得Lisp学习起来很枯燥,不能用来写俄罗斯方块,不能用来写画图板,来来回回都是写一些基于文本的样例,很是无聊。其实Lisp可以用来写很多东西,而且写起来很有意思。因为Lisp文本处理能力很强,很适合写网站,所以对初学者来讲,如果希望做一些实际一点转载 2012-07-20 09:24:36 · 648 阅读 · 0 评论 -
lisp中的变量
支持两种类型变量:词法变量(lexical)和动态变量(dynamic),分别对应于其他语言中的局部变量和全局变量,只能说是大致相似,并不是所有的语言都有lisp中的闭包的词法作用域变量与其他语言一样,Common Lisp中的变量时一些可以保存值的具体位置,但他不像java,C++等语言那样带有确定的类型,也就是说不用声明对象所保存的对象的类型。Common lisp中所有的值都是对原创 2012-07-19 23:21:12 · 5537 阅读 · 0 评论 -
数字,字符,字符串
Common lisp 中的数据类型,包括我们平常见的整数,复数,浮点数以及数组,列表,哈希表,输入和输出流,一种可移植地表示文件名的抽象。函数同样是数据类型,他可以保存在变量中,可作为实参传递,也可以作为返回值以及运行期创建。1:数字Lisp 是一门用于数学的良好语言,因为他最初就是由数学家设计的,用作研究数学函数的工具,它的数学更接近与数字数学,Common lisp支持复数-原创 2012-07-20 17:34:30 · 663 阅读 · 0 评论 -
lisp函数(二)apply/mapcar
一:local functionFunctions defined via defun or setf of symbol-function are global functions.局部函数可以由labels来定义,他跟let类似,只是第一个参数不是用来指定新的变量而是一组函数的定义。该参数的形式如下:( name parameters body)(labels ((add原创 2012-08-01 02:13:22 · 5837 阅读 · 1 评论 -
lambda 注意点
(lambda (parameter) body)Lambda表达式可以视为特殊的函数名,名字本身就直接描述函数的用途。这就是为啥可以用带#'的lambda表达式来代替一个函数名。同时他跟单纯的函数名有区别。比如你直接输入plot,他怎么会知道这个就是个函数名字呢?所以会说plot unbound,你必须得指明它是一个函数对象#'注意点:下面这个例子也说明了,无论你la原创 2012-07-19 21:33:14 · 801 阅读 · 0 评论 -
symbol
symbolp函数CL-USER> (symbolp 'aaa) TCL-USER> (symbolp nil) TCL-USER> (defun me ()) MECL-USER> (symbolp me) me is unbound,CL-USER> (sy原创 2012-08-01 17:59:45 · 437 阅读 · 0 评论 -
REPL中读取文件显示^M的原因
关于为啥从文件中读取内容,在REPL中显示会有^M 呢?因为你比较了ascii以后,你会发现当按byte查看他到底在那个位置输出了什么的时候,也就是在1013的时候出现了这个字符,然后我就怀疑的是不是文档的回车换行在显示的时候有问题。接下来我就开始单个测试读取字符LR 和CR。方式是按write-byte方式分别读进去一个10,然后按read-char的方式读进来,并且输出显示。最后发现当读进去1原创 2012-07-23 00:35:21 · 1451 阅读 · 0 评论 -
列表
1:点对的概念理解列表的话,先清楚所谓的点对单元如下图,其中a,b可以为任何对象。Cons 接受两个实参并且返回他们两个组成的点对单元。CAR是该列表的第一个元素,CDR则包含着其余元素。既然a,b可以为任何对象,如果串过去的是两个整数实参也就是如下(1.2)的点对形式,但是这样的结构不能够再继续扩展。所以我们就引入了Lisp中的列表规则:后面的位置我们不直接存字面值了,改为地址,比如下一原创 2012-07-22 09:28:42 · 389 阅读 · 0 评论 -
lisp 中REQL基本操作
直接输入q推出调试器,然后回到REQL里,调试器缓冲区将会消失,而REQL将显示下面CL-USER> (hello-world); Evaluation aborted on #.C-c C-c 将启动 slime-compile-defun命令,将当前定义发给lisp进行求值并编译C-c C-z 切换到REPL C-x C-s 可以启动Emacs命令save-buff原创 2012-07-18 18:00:49 · 1101 阅读 · 0 评论 -
clos 类的定义与访问
一:类的定义DEFCLASS(defclass name (direct-superclass-name) (slot-specifier*))二:对象初始化与槽描述符:Make-instance的参数是想要实例化的类的名字,而返回值就是新的对象。Slot-specifier 槽描述符也就是我们平常说的成员变量。槽描述符中的一些选项::initarg 即initi原创 2012-07-25 23:42:22 · 573 阅读 · 0 评论 -
clos 介绍
广义函数前言:来自C++阵营的人们倾向于认为C++的特定方面,例如严格的数据封装是面向对象的关键特征,有这些观点的人们通常是C++,Eiffel或者Java这类静态语言的拥护者,他们不认为common lisp是真正的面向对象。那些将消息传递视为面向对象关键特征的人们也不会很高兴,因为Common lisp在声称自己是面向对象的同时,其面向广义函数的设计提供了纯消息传递所无法提供的自由度原创 2012-07-25 23:36:04 · 1265 阅读 · 0 评论 -
precedence and combination
一:precedence list(defclass e() ((ce :initform "ce2" :accessor ce) (ef :initform "ef1" :accessor ef) (eb :initform "eb1" :accessor eb)))(defclass f() ((cf :initform "cf2" :accessor cf)原创 2012-07-26 00:03:48 · 472 阅读 · 0 评论 -
槽的继承
槽和继承根据字面含义,他是为了解决当进行类的继承的时候出现的槽名字/槽描述符一样时子类如何继承和取舍。(defparameter *account* (make-instance 'bank-account)) 因为一个类中槽的名字必须是唯一的,虽然这样,但是如果一个类继承了很多的基类,但是这些基类都定义了一个叫balance的槽。处理方式是把同名原创 2012-07-25 23:58:21 · 641 阅读 · 0 评论 -
目录抽象化实现(-)
一:文件名到目前为止我们都是用字符串表示文件名,因为不同的系统的文件命名方案不一样,这样就会导致代码捆绑到特定的文件系统。为了实现可移植,Common lisp定义了另一种文件表示方式:路径名(pathname)而以本地语法写成的字符串即名字字符串(namestring)二:路径名如何表示文件名路径名使用6个组件来表示文件名的结构化对象:主机(host),设备(device),原创 2012-07-24 18:17:46 · 484 阅读 · 0 评论 -
目录抽象化实现(二)
为了让路径名足够抽象从而可以应用于广泛的文件系统。我们必须对多数跨越不同实现的常见操作提供一致接口。尽管你编写的代码都是“可移植的”,但是可能偶尔需要依赖于实现相关的功能或者为不同实现编写稍有差别的代码。Common lisp提供一种称为读取期条件化的机制,有条件的执行特性代码。该机制由变量*feature* 和两个被lisp读取器所理解的附加语法构成(#+,#-)*feature*是个符原创 2012-07-24 18:28:42 · 621 阅读 · 0 评论 -
I/O中的一些问题的研究
file-position 接受一个打开的流,然后返回文件的当前位置,也就是读取或者写入该流的元素的数量。1:从io4.db中往io3.db中输入数据,并且显示读入和写入的元素的数量。下面是我考到wps中,输出显示格式,你发现他在第二个引号换行了,然后他后面也换行了。在后面换行的话,正常,因为在write-line的时候,他会给字符串加上一个换行符,然后我就测试了一下在wps的doc里面是不是原创 2012-07-24 11:18:24 · 884 阅读 · 0 评论