setf  赋值操作符,定义一个全局变量。返回值是最后一个赋值的结果。

let 局部变量操作符。let表达式有两部分组成。第一部分是任意多的变量赋值,他们被包裹在一个()中,第二部分是任意数量的表示式作为 let 的函数体。let 表达式的返回值为 最后一个表达式的求值结果。

cons 对象。

cons

作用:把两个对象结合成一个 cons对象。

本质:cons 对象是一对指针。第一个是 car,第二是 cdr。

列表对象 = cons 对象 + nil。所有不是 Cons 对象的东西,就是一个原子 (atom)。nil 是一个原子。

eql 与 equal 表达式:

一般来说,eql 判断两个对象是否相等,equal 判断值是否相等。

lisp 没有显示指针。

对值的操作内部一般都是自动使用指针,因此不需要显式指针。

copy-list 拷贝列表。返回新的 列表(cons 对象)。

append 连接多个列表 。返回新的列表(cons 对象)。

zerop 判断参数的值是否为 0

列表的存取:

nth 与 nthcdr 接受两个参数返回列表的第几个 car 与 cdr。起始索引为 0

> (nthcdr 2 '(a b c d))
(c d)

last 取列表的最后一个 cons对象 与 (car (last ..)) 取列表的最后一个元素。

> (last '(a b c))
(C)
> (car (last '(a b c)))
C

> (car (last '(a b '(c d))))
'(C D)
> (last '(a b '(c d)))
('(C D))

映射

对列表中的每个元素映射。若函数接受多个参数时。参数可以增加为多个列表。

> (mapcar #'(lambda (x) (+ x 10))
'(1 2 3))
(11 12 13) > (mapcar #'list
'(a b c)
'(1 2 3 4))
((A 1) (B 2) (C 3))

copy-tree 与 copy-list 的区别

区别很简单,copy-list只复制 cdr,对 car直接返回,不做复制(这样可能会改变原值)。copy-tree通常用在操作列表内部节点

> (setf s '((a b) c (d e)))
((A B) C (D E)) > (setf m (copy-list s))
((A B) C (D E)) > (eql (car s) (car m))
T > (eql (car s) (car n))
NIL

理解递归:

判断一个递归是否正确?基本用例是否正确。假设对于n成立,判断对于 n + 1是否成立。

写出一个做你想做的事情的递归函数?

结束。

common lisp里的几个操作符的更多相关文章

  1. common lisp 里的几个操作符(2)

    集合 (Set) member 函数 默认使用 eql比较对象,可传入关键字参数 :test,作为比较的函数.关键字参数 :key,指定在每个元素上应用这个函数. > (member 2 '(( ...

  2. common lisp和scheme的区别

    1. 在Common Lisp 眼中,一个符号的symbol-value 和symbol-function 是不一样的,而Scheme对两者不作区分.在Scheme 里面,变量只有唯一对应的值,它可以 ...

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

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

  4. Common Lisp编译程序的小技巧

    这几天开始玩Common Lisp,遇上了一个有意思的问题,CL一般是解释运行,也有实现可以编译生成字节码(fas文件).我正在用的两种CL实现是SBCL和CLISP,前者是我从<实用Commo ...

  5. Common Lisp

    [Common Lisp] 1.操作符是什么? 2.quote. 3.单引号是quote的缩写. 4.car与cdr方法. 5.古怪的if语句. 6.and语句. 7.判断是真假. null 与 no ...

  6. 搭建fedora开发环境 common lisp, c++, go

    第三方软件库: http://download1.rpmfusion.org/free/fedora/releases/25/Everything/x86_64/os/repoview/index.h ...

  7. Difference between LET and LET* in Common LISP

    Difference between LET and LET* in Common LISP   LET   Parallel binding which means the bindings com ...

  8. scheme和common lisp 区别

    Scheme and Common Lisp use different names for some of the basic system functions. Many Lisp program ...

  9. slime+sbcl for common lisp

    sudo apt-get install slime audo apt-get install sbcl ;;sbcl+slime for common lisp ;;sudo apt-get ins ...

随机推荐

  1. MAC终端密钥登录自动输入密码

    升级MAC系统后,发现用于MAC终端ssh服务器的登录脚本无法正常执行了,表现为:需要手动输入密钥密码,于是重新整理一下,恢复正常,在此记录一下: #!/usr/bin/expect -fspawn ...

  2. Android的Databinding-资源绑定

    databinding还能对布局的资源文件进行绑定. <data class="ResourceBinding"> <variable name="la ...

  3. 模拟位置 定位 钉钉打卡 运动轨迹 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  4. 使用python实现深度神经网络 3(转)

    使用python实现深度神经网络 3 快速计算梯度的魔法--反向传播算法 快速计算梯度的魔法--反向传播算法 一.实验介绍 1.1 实验内容 第一次实验最后我们说了,我们已经学习了深度学习中的模型mo ...

  5. [Linux] - 利用ping给端口加密,限制访问

    Linux中,想对特定的端口加密访问,可以使用iptables的ping方式. 作用 访问被限制的端口,必需先ping发送对应的字节包(字节包大小可自行设置,此为密钥)才能访问成功! 下边是对SSH的 ...

  6. Python 3安装MySQLdb

    Python 2安装的是mysql-python,Python 3安装mysql-python以后,仍然不能import MySQLdb,原来Python 3应该安装mysqlclient,就可以im ...

  7. 调试 lvgl 的一个例子

    发现一个新的 vector graphic 的库,用 C 写的,效果丰富,接口简单,而且是 MIT License,所以想试一试.因为它支持 framebuffer,所以,在 linux 上先走一个. ...

  8. Ubuntu 16.04 升级git

    To update git on Ubuntu 12.04 just follow this line of commands: sudo apt-get install python-softwar ...

  9. 分析轮子(一)-ArrayList.java

    前言:之前也看过一些JDK源码,不过没有留下痕迹,经久年月就淡忘了,现在的时机也差不多了,想再看一次,并且记录下来自己的感想,于是从自己使用最多最熟悉的地方开始!并且看的过程中,我希望自己思考一下如下 ...

  10. 超简单的okHttpUtils封装(下)

      版权声明:转载请注明出处:http://blog.csdn.net/piaomiao8179 https://blog.csdn.net/piaomiao8179/article/details/ ...