LISP
文章平均质量分 59
fengda2870
现在学习分形艺术!
展开
-
【转】现实世界的LISP:Clojure语言初探
我在学生时代最喜欢两门程序设计语言:Scheme和Haskell。Scheme的简洁灵活和Haskell的纯函数世界都给我留下了 深刻印象,因此一直希望能用这样的语言做一些实际工作。了解到Clojure之后,欣喜地发现它结合了LISP和函数式语言的优点,同时又拥有JVM成熟 的生态圈,虽然年轻,但可以立即在实际项目中应用。开始使用Clojure使用Clojure最简便的方法是安装L原创 2013-06-10 17:58:26 · 1442 阅读 · 0 评论 -
LISP 简单的数据库 3.6.1 依艺术家字段值进行查询
增加select-by-artist方法;使用全局变量记录数据(defvar *db* nil);数据记录格式(defun make-cd (title artist rating ripped) (list :title title :artist artist :rating rating :ripped ripped));添加记录(defun add-re原创 2013-06-12 21:51:01 · 1290 阅读 · 0 评论 -
LISP 6.3 动态变量
词法绑定与赋予新值仅会影响当前作用域词法绑定案例CL-USER> (defvar *x* 10)*X*CL-USER> (defun foo() (format t "x:~a~%" *x*))FOOCL-USER> (foo)x:10NILCL-USER> (defun bar() (foo) (let ((*x* 20)) (fo原创 2013-06-13 21:28:52 · 1473 阅读 · 0 评论 -
LISP 5.8-5.9 高阶函数与匿名函数
Common LISP中提供了两个函数对象来调用函数 funcall 与apply下面的函数是一个画点的函数,使用funcall函数(defun plot (fn min max step) (loop for i from min to max by step do (loop repeat (funcall fn i) do (format t "*")) (form原创 2013-06-13 16:53:54 · 1467 阅读 · 0 评论 -
LISP 6.1 变量的基础
CL-USER> (defun foo(x) (format t "Parameter:~a~%" x) (let ((x 2)) (format t "Out LET: ~a~%" x) (let ((x 3)) (format t "Inner LET: ~a~%" x)) (format t "Out LET: ~a~%"原创 2013-06-13 19:08:01 · 1089 阅读 · 0 评论 -
LISP 8.5 宏形参
(defun primep (number) (when (> number 1) (loop for fac from 2 to (isqrt number) never (zerop (mod number fac)))))(defun next-prime (number) (loop for n from number when (primep n) return n)原创 2013-06-14 20:53:12 · 1153 阅读 · 0 评论 -
LISP 8.6 生成展开式
代码如上一篇一致使用使用macroexpand-1函数可以展开宏(macroexpand-1 '(do-primes-2 (p 0 19) (format t "~d" p)))返回结果:(DO ((P (NEXT-PRIME 0) (NEXT-PRIME (1+ P)))) ((> P 19)) (FORMAT T "~d~t" P))执行返回的结果:CL原创 2013-06-14 21:06:23 · 1118 阅读 · 0 评论 -
LISP 7.6 Do循环
写一个遍历质数的程序(defun primep (number) (when (> number 1) (loop for fac from 2 to (isqrt number) never (zerop (mod number fac)))))(defun next-prime (number) (loop for n from number when (primep原创 2013-06-14 18:44:30 · 1917 阅读 · 2 评论 -
LISP 8.7.1 堵住漏洞1——随机end值的漏洞及调用顺序漏洞
漏洞描述:使用查看展开式(macroexpand-1 '(do-primes-2 (p 0 (random 100)) (format t "~d~t" p)))返回结果:(DO ((P (NEXT-PRIME 0) (NEXT-PRIME (1+ P)))) ((> P (RANDOM 100))) (FORMAT T "~d~t" P))当运行展开式原创 2013-06-14 21:30:16 · 1353 阅读 · 0 评论 -
LISP 手册
http://www.gnu.org/software/emacs/manual/html_mono/cl.html原创 2013-06-14 23:03:07 · 1636 阅读 · 0 评论 -
LISP 8.7.2 堵住漏洞2——修复变量名的漏洞
接上一节,先执行如下代码,观看效果:(do-primes-3-1 (ending-value 0 10) (format t "~d~t" ending-value)),死机没?最后一个需要堵上的漏洞是由于使用了变量名ending-value而产生的。问题在于这个名字(其应当完全属于宏实现内部的细节)它可以跟传递给宏的代码或是宏被调用的上下文产生原创 2013-06-14 22:21:12 · 1270 阅读 · 0 评论 -
LISP 8.8 编写宏中宏
宏的作用是将常见的句法模式抽象掉,而反复出现在宏编写的特定模式同样也可受益于其抽象能力。最后的几个do-primes函数中,都是以let形式确保子形式仅被求值一次的,引入了一些变量用来保存宏展开过程中用到的生成符号。这也是一个常见模式,同样的也可以使用一个宏来将它抽象掉。;;;编写宏中宏(defmacro with-gensyms ((&rest names) &body b原创 2013-06-14 22:59:32 · 1401 阅读 · 0 评论 -
LISP 简单的数据库 3.5 保存和加载数据库
将*DB*中的数据信息保存到文件中,以及可以从文件中读取数据信息放置到*DB*全局变量中添加两个函数 save-db 及 load-db;使用全局变量记录数据(defvar *db* nil);数据记录格式(defun make-cd (title artist rating ripped) (list :title title :artits artist :rating r原创 2013-06-12 21:08:04 · 1930 阅读 · 0 评论 -
LISP 简单的数据库 3.4 改进用户交互
;使用全局变量记录数据(defvar *db* nil);数据记录格式(defun make-cd (title artist rating ripped) (list :title title :artits artist :rating rating :ripped ripped));添加记录(defun add-record (cd) ( push cd *db*))原创 2013-06-12 20:55:36 · 1276 阅读 · 0 评论 -
LISP 简单的数据库 3.1 CD与记录
(defun make-cd (title artist rating ripped) (list :title title :artits artist :rating rating :ripped ripped))CL-USER> (make-cd "Roses" "Kathy" 7 t)(:TITLE "Roses" :ARTITS "Kathy" :RATING 7原创 2013-06-12 18:39:06 · 1027 阅读 · 0 评论 -
Lisp in a box 安装指南
什么是Lispbox?lispbox 是Common Lisp的集成开发环境。实际是Lispbox只是组合配置了Emacs编辑器,SLIME(Emacs的高级Lisp 交互模式)和Quicklisp 库管理工具和CCL Lisp编译器。这些工具组合在一起给你了你所期望的一个ide能给你的所用的功能集合,甚至更多。Lispbox使你可以迅速和简单的投入使用。Lispbox可以原创 2013-06-11 22:59:08 · 1870 阅读 · 0 评论 -
LISP中 remove-if-not 及 remove-if
CL-USER> (remove-if-not #'evenp '(1 2 3 4 ))(2 4)CL-USER> (remove-if #'evenp '(1 2 3 4 ))(1 3)原创 2013-06-12 21:10:26 · 1683 阅读 · 0 评论 -
LISP 简单的数据库 3.8 使用宏优化Where语句
之前的查询条件判断语句如下,它们有太多的相似之处,使用宏来生成真正需要被执行的语句 (if title (equal (getf cd :title) title) t) (if artist (equal (getf cd :artist) artist) t) (if rating (equal (getf cd :rating) rating) t) (if原创 2013-06-12 22:53:25 · 1287 阅读 · 0 评论 -
emacs命令
emacs命令emacs中的每一个命令都有一个命令名,命令名就是该命令所对应的LISP函数的函数名。在emacs中,我们可以为这些命令配置快捷键,从而达到快速调用命令的目的。.使用emacs来执行命令的方法有两种:(1).使用Ctrl键 (2).使用Meta键。所有emacs命令都可以用Meta键表示出来,键盘上如果没有Meta键,则可以用Alt键或ESC键来代替。常用的emacs原创 2013-06-12 23:42:44 · 1562 阅读 · 0 评论 -
Emacs中如何从文本模式中切换到命令模式
执行命令Ctrl+x b 输入*slime-repl clozurecl*原创 2013-06-12 18:43:51 · 2655 阅读 · 0 评论 -
LISP 简单的数据库 3.2 录入CD
使用全局变量 *db*,来保存数据(defvar *db* nil)(defun make-cd (title artist rating ripped) (list :title title :artits artist :rating rating :ripped ripped))(defun add-record (cd) ( push cd *db*))原创 2013-06-12 18:57:23 · 1090 阅读 · 0 评论 -
LISP 简单的数据库 3.3 查看数据库内容
格式化输出数据内容;使用全局变量记录数据(defvar *db* nil);数据记录格式(defun make-cd (title artist rating ripped) (list :title title :artits artist :rating rating :ripped ripped));添加记录(defun add-record (cd) ( push原创 2013-06-12 19:06:33 · 2422 阅读 · 0 评论 -
LISP 简单的数据库 3.6.2 优化查询算法
select-by-artist方法只能依据artist字段值进行查询,经过改进,可以使查询功能更强大可以使用其他字段值进行查询,但不需要重新写看上去差不多的算法增加select及where函数;使用全局变量记录数据(defvar *db* nil);数据记录格式(defun make-cd (title artist rating ripped) (list原创 2013-06-12 22:02:00 · 1261 阅读 · 0 评论 -
【转】人工智能之父、Lisp语言发明者约翰麦卡锡去世
Lisp语言发明者、“人工智能之父”约翰·麦卡锡(John Maccarthy)于10月24日与世长辞,享年84岁。青少年时的约翰·麦卡锡聪慧过人,初中时他根据一份加州理工大学的课程目录自学完大学低年级微积分课程,也因此在1944年上大学时可以免修头两年大学数学,之后去普林斯顿大学研究生院继续深造。冯·诺依曼报告引发的好奇心约翰·麦卡锡的学术人生如何步入人工智能领域原创 2013-06-10 17:41:11 · 1519 阅读 · 0 评论 -
LISP中的基础知识
(quote x)返回x,我们简记为'x(atom x)当x是一个原子或者空表时返回原子t,否则返回空表()。在Lisp中我们习惯用原子t表示真,而用空表()表示假。> (atom 'a)t> (atom '(a b c))()> (atom '())t(eq x y)当x和y的值相同或者同为空表时返回t,否则返回空表()> (eq 'a 'a)原创 2013-06-11 16:00:54 · 1556 阅读 · 0 评论 -
LISP 简单的数据库 3.7 更新记录
增加update函数以更新记录;使用全局变量记录数据(defvar *db* nil);数据记录格式(defun make-cd (title artist rating ripped) (list :title title :artist artist :rating rating :ripped ripped));添加记录(defun add-record (c原创 2013-06-12 22:20:08 · 1193 阅读 · 0 评论 -
LISP DO循环斐波那契额数列
CL-USER> (do ((n 0 (1+ n)) (cur 0 next) (next 1 (+ cur next))) ((= 10 n) cur))55原创 2013-06-16 17:43:09 · 1313 阅读 · 0 评论