lisp base
一 、quote
lisp 使用s-expr表示数据和代码,通常会将第一项作为函数,而将后续元素当做参数传给第一项进行计算。可以通过quote来进行其他解析,quote可用(‘)表示:
( + 1 1)
2 ‘(+ 1 1)
(+ 1 1)
二 、反引号(·)
(·)按键(~)为同一个键盘按键。作用和quote差不多,但可以使其中部分字符串保留原解析,需要使用,放在需要保留原解析的字符串之前。
`(+ 1 ,(+ 0 1))
(+ 1 1)
三、 #’
该操作符表示对函数的引用
四、控制结构
do
(do ((x 1 (+ x 1))
(y 1 (* y 2)))
((> x 5) y)
(print y)
(print 'working))
cond
(cond
((evenp a) a) ;if a is even return a
((> a 7) (/ a 2)) ;else if a is bigger than 7 return a/2
((< a 5) (- a 1)) ;else if a is smaller than 5 return a-1
(t 17)) ;else return 17 2
case
(setq x 'd)
(case x
(a 5)
((d e) 7)
((b f) 3)
(otherwise 9))
7
loop
(setq a 4)
(loop
(setq a (+ a 1))
(when (> a 6) (return a))) 7
if
(if t 6 5)
6
(if nil 6 5)
5
五、block
Common Lisp 的构造区块(block)的基本操作符:progn 、block 以及 tagbody 。
progn主体中的表达式会顺序求值并返回最后一个表达式的值。
(progn
(format t "a")
(format t "b")
(+ 11 12))
ab
23
block相当于带有特别出口的progn。
(block head
(format t "Here we go.")
(return-from head 'idea)
(format t "We'll never see this."))
Here we go.
IDEA
tagbody大多数迭代操作符都隐含一个tagbody。
(tagbody
(setf x 0)
top
(setf x (+ x 1))
(format t "~A " x)
(if (< x 10) (go top)))
1 2 3 4 5 6 7 8 9 10
NIL
return宏把传入的参数当做封闭区块nil的返回值。
(block nil
(return 27))
27
在一个block(明确定义的或隐含的),不论return-from或者return都不会运行。
六、函数
可通过 symbol-function 给函数配置某个名字:
(setf (symbol-function 'add2)
#'(lambda (x) (+ x 2)))
新的全局函数可以这样定义,用起来和 defun 所定义的函数一样:
(add2 0)
2
通过 defun 或 symbol-function 搭配 setf 定义的函数是全局函数。你可以像存取全局变量那样,在任何地方存取它们。定义局部函数也是有可能的,局部函数和局部变量一样,只在某些上下文内可以访问。
局部函数可以使用 labels 来定义,它是一种像是给函数使用的 let 。它的第一个实参是一个新局部函数的定义列表,而不是一个变量规格说明的列表。列表中的元素为如下形式:
lisp base的更多相关文章
- Lisp简明教程
此教程是我花了一点时间和功夫整理出来的,希望能够帮到喜欢Lisp(Common Lisp)的朋友们.本人排版很烂还望多多海涵! <Lisp简明教程>PDF格式下载 <Lisp简明教程 ...
- 小白解决CENTOS7错误:Cannot find a valid baseurl for repo: base/7/x86_6
刚入手的MacBook想着学点东西,本汪还是决定玩玩CentOS服务器,安装好了VirtualBox + CentOS. 打开一看,懵逼了!命令行! 行吧,先装个图形界面: $sudo yum gro ...
- 分布式系列文章——从ACID到CAP/BASE
事务 事务的定义: 事务(Transaction)是由一系列对系统中数据进行访问与更新的操作所组成的一个程序执行逻辑单元(Unit),狭义上的事务特指数据库事务. 事务的作用: 当多个应用程序并发访问 ...
- Lisp和SICP
大概不少programmer都看过<黑客与画家>,作者用了整整一章的篇幅讨论Lisp的强大.我自然就会手痒痒. 几个月前,几天内攻城略地搞定了Python,用的方法便是 ...
- base的应用
------------父类 public class Person { public Person(string name,int age) { this.Na ...
- C# base 64图片编码解码
使用WinForm实现了图片base64编码解码的 效果图: 示例base 64编码字符串: /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKD ...
- c++ builder 2010 错误 F1004 Internal compiler error at 0x9740d99 with base 0x9
今天遇到一个奇怪的问题,拷贝项目后,在修改,会出现F1004 Internal compiler error at 0x9740d99 with base 0x9 ,不管怎么改,删除改动,都没用,关闭 ...
- MVC中的BASE.ONACTIONEXECUTING(FILTERCONTEXT) 的作用
一句话,就是调用base.OnActionExecuting(filterContext)这个后,才会执行后续的ActionFilter,如果你确定只有一个,或是不想执行后续的话,那么可以不用调用该语 ...
- ANSI Common Lisp Practice - My Answers - Chatper - 3
Ok, Go ahead. 1 (a) (b) (c) (d) 2 注:union 在 Common Lisp 中的作用就是求两个集合的并集.但是这有一个前提,即给的两个列表已经满足集合的属性了.具体 ...
随机推荐
- Linux安装AUTOCONF和AUTOMAKE产生的程序的一般步骤
概述: 在Linux下安装一个应用程序时, 一般先运行脚本configure, 然后用make来编译源程序, 在运行make install, 最后运行make clean删除一些临时文件. 相关点的 ...
- 应输入 #endregion 指令报错的排查技巧
VS2010中错误排查的一个小技巧,欢迎大家吐槽: 错误 9 应输入 #endregion 指令sses.cs 3778 2 xxx.xx 这个错很明显,是缺少#endr ...
- javascript 基础知识-1
1, stringObject.charAt(index) : 返回指定位置(index)的字符 2, RegExpObject.exec(string), 用于检索字符串(string)中正则表达式 ...
- C# 日历类
using System; namespace DotNet.Utilities { /// <summary> /// 农历属性 /// </summary> public ...
- odata.EF一些常用配置
Enable-Migrations //在数据库里建一个表 Add-Migration //添加 Update-Database //更新数据 install-package entityframew ...
- java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/images/media/20 from pid=711, uid=10074 requires android.permission.READ_
java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider ur ...
- springboot在阿里CentOS 7后台永久运行
查看Java进程可以使用 ps -ef|grep java 首次后台永久启动,会把日志输出到新建的log.file文件 nohup java -jar demo-0.0.1-SNAPSHOT.jar ...
- 工作经验:mybatis 处理 oracle Long 类型
前言:mybatis 接收 oracle 中 LONG 类型的,报错:无效的列类型: getCLOB not implemented for class oracle.jdbc.driver.T4CL ...
- 《JavaWeb从入门到改行》多重外键关系在java中的处理方案
目录:(点击红色方框展开子目录) 问题描述 无 项目案例说明 业务描述 数据库说明 项目源码及下载 无 问题描述 如上两图,数据库中各个表之间有很多的外键关系,其中业务关系是一个用户下有该用户的订单, ...
- Bash拾遗:变量
使用引号包裹变量 在<高级Bash脚本编程指南>中的4.1节中有这么个例子: hello="A B C D" echo $hello # A B C D echo &q ...