一 、quote

lisp 使用s-expr表示数据和代码,通常会将第一项作为函数,而将后续元素当做参数传给第一项进行计算。可以通过quote来进行其他解析,quote可用(‘)表示:

  1. + 1 1
  2. 2
  3.  
  4. ‘(+ 1 1
  5. (+ 1 1

二 、反引号(·)

(·)按键(~)为同一个键盘按键。作用和quote差不多,但可以使其中部分字符串保留原解析,需要使用,放在需要保留原解析的字符串之前。

  1. `(+ 1 ,(+ 0 1))
  2. (+ 1 1)

三、 #’

该操作符表示对函数的引用

四、控制结构

do

  1. (do ((x 1 (+ x 1))
  2. (y 1 (* y 2)))
  3. ((> x 5) y)
  4. (print y)
  5. (print 'working))

cond

  1. (cond
  2. ((evenp a) a) ;if a is even return a
  3. ((> a 7) (/ a 2)) ;else if a is bigger than 7 return a/2
  4. ((< a 5) (- a 1)) ;else if a is smaller than 5 return a-1
  5. (t 17)) ;else return 17
  6.  
  7. 2

case

  1. (setq x 'd)
  2. (case x
  3. (a 5)
  4. ((d e) 7)
  5. ((b f) 3)
  6. (otherwise 9))
  7. 7

loop

  1. (setq a 4)
  2. (loop
  3. (setq a (+ a 1))
  4. (when (> a 6) (return a)))
  5.  
  6. 7

if

  1. (if t 6 5)
  2. 6
  3. (if nil 6 5)
  4. 5

五、block

Common Lisp 的构造区块(block)的基本操作符:progn 、block 以及 tagbody 。

progn主体中的表达式会顺序求值并返回最后一个表达式的值。

  1. (progn
  2. (format t "a")
  3. (format t "b")
  4. (+ 11 12))
  5. ab
  6. 23

block相当于带有特别出口的progn。

  1. (block head
  2. (format t "Here we go.")
  3. (return-from head 'idea)
  4. (format t "We'll never see this."))
  5. Here we go.
  6. IDEA

tagbody大多数迭代操作符都隐含一个tagbody。

  1. (tagbody
  2. (setf x 0)
  3. top
  4. (setf x (+ x 1))
  5. (format t "~A " x)
  6. (if (< x 10) (go top)))
  7. 1 2 3 4 5 6 7 8 9 10
  8. NIL

return宏把传入的参数当做封闭区块nil的返回值。

  1. (block nil
  2. (return 27))
  3. 27

在一个block(明确定义的或隐含的),不论return-from或者return都不会运行。

六、函数

可通过 symbol-function 给函数配置某个名字:

  1. (setf (symbol-function 'add2)
  2. #'(lambda (x) (+ x 2)))

新的全局函数可以这样定义,用起来和 defun 所定义的函数一样:

  1. (add2 0)
  2. 2

通过 defun 或 symbol-function 搭配 setf 定义的函数是全局函数。你可以像存取全局变量那样,在任何地方存取它们。定义局部函数也是有可能的,局部函数和局部变量一样,只在某些上下文内可以访问。

局部函数可以使用 labels 来定义,它是一种像是给函数使用的 let 。它的第一个实参是一个新局部函数的定义列表,而不是一个变量规格说明的列表。列表中的元素为如下形式:

lisp base的更多相关文章

  1. Lisp简明教程

    此教程是我花了一点时间和功夫整理出来的,希望能够帮到喜欢Lisp(Common Lisp)的朋友们.本人排版很烂还望多多海涵! <Lisp简明教程>PDF格式下载 <Lisp简明教程 ...

  2. 小白解决CENTOS7错误:Cannot find a valid baseurl for repo: base/7/x86_6

    刚入手的MacBook想着学点东西,本汪还是决定玩玩CentOS服务器,安装好了VirtualBox + CentOS. 打开一看,懵逼了!命令行! 行吧,先装个图形界面: $sudo yum gro ...

  3. 分布式系列文章——从ACID到CAP/BASE

    事务 事务的定义: 事务(Transaction)是由一系列对系统中数据进行访问与更新的操作所组成的一个程序执行逻辑单元(Unit),狭义上的事务特指数据库事务. 事务的作用: 当多个应用程序并发访问 ...

  4. Lisp和SICP

         大概不少programmer都看过<黑客与画家>,作者用了整整一章的篇幅讨论Lisp的强大.我自然就会手痒痒.      几个月前,几天内攻城略地搞定了Python,用的方法便是 ...

  5. base的应用

    ------------父类   public class Person   {       public Person(string name,int age)    {       this.Na ...

  6. C# base 64图片编码解码

    使用WinForm实现了图片base64编码解码的 效果图: 示例base 64编码字符串: /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKD ...

  7. c++ builder 2010 错误 F1004 Internal compiler error at 0x9740d99 with base 0x9

    今天遇到一个奇怪的问题,拷贝项目后,在修改,会出现F1004 Internal compiler error at 0x9740d99 with base 0x9 ,不管怎么改,删除改动,都没用,关闭 ...

  8. MVC中的BASE.ONACTIONEXECUTING(FILTERCONTEXT) 的作用

    一句话,就是调用base.OnActionExecuting(filterContext)这个后,才会执行后续的ActionFilter,如果你确定只有一个,或是不想执行后续的话,那么可以不用调用该语 ...

  9. ANSI Common Lisp Practice - My Answers - Chatper - 3

    Ok, Go ahead. 1 (a) (b) (c) (d) 2 注:union 在 Common Lisp 中的作用就是求两个集合的并集.但是这有一个前提,即给的两个列表已经满足集合的属性了.具体 ...

随机推荐

  1. Diskrete Mathematik

    1.Aussagenlogik 1.1 Gleichwertiges Kalkül 1.2 Normalform Einfache Disjunktion besteht aus Disjunktio ...

  2. [PY3]——基本语法

    Python3基本语法-xmind图 常量/变量 1. 常量:一旦赋值就不可再改变.不能对它重新赋值.python不存在常量2. 字面常量:一个单独出现的量,未赋值给任何变量或常量3. 变量: i=3 ...

  3. UUID 压缩为22位

    public class Generator { private static char[] BASE64 = "abcdefghijklmnopqrstuvwxyz_ABCDEFGHIJK ...

  4. 【转】让Entity Framework不再私闯sys.databases

    这里的“私闯sys.databases”是指Entity Framework默认发起的查询:SELECT Count(*) FROM sys.databases WHERE [name]=N'数据库名 ...

  5. yii 页面加载完成后弹出模态框

    <?php $js = <<<JS $('#page-modal').modal('show');//页面加载完显示模态框 $('.modal-dialog').css('wi ...

  6. 泛型委托Func<T>

    Func<T>——委托只有泛型版本的,接受参数个数可以是若干个,也可以没有,但是必须是有返回值的方法. Func<TResult>——这个表示没有参数,只有返回值TResult ...

  7. Android Viewpage 滑块

    依赖: implementation 'com.android.support:appcompat-v7:28.0.0' 在主页面layout <android.support.v4.view. ...

  8. Java中URL重写(urlrewrite+Maven)

    一.UrlRewrite的作用   UrlRewrite即地址重写,用户得到的全部都是经过处理后的URL地址.将我们的动态网页地址转化为静态的地址,如html.shtml,还可以隐藏网页的真正路径.此 ...

  9. Spring 创建 IOC 容器时加载配置文件的几种方式

    一.ClassPathXmlApplicationContext 类路径加载 1. 使用 classpath 路径,classpath 前缀加不加都可以. ApplicationContext act ...

  10. HDU P2222 Keywords Search

    In the modern time, Search engine came into the life of everybody like Google, Baidu, etc.Wiskey als ...