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. python下的selenium和PhantomJS

    一般我们使用python的第三方库requests及框架scrapy来爬取网上的资源,但是设计javascript渲染的页面却不能抓取,此时,我们使用web自动化测试化工具Selenium+无界面浏览 ...

  2. 用SSH登录远程的机器,在远程机器上执行本地机器上的脚本

    假设本地的机器IP为10.245.111.90,我们想要在10.245.111.93上执行一个保存在10.245.111.90上的脚本. 经过测试通过的命令如下: ssh root@10.245.11 ...

  3. 微信支付 python版

    需求: 微信打开商品列表页面-> 点击商品后直接显示付款页面-> 点击付款调用微信支付 说明 微信支付需要你申请了公众号(appid, key - 用于签名), 商户号(mch_id, A ...

  4. 小程序入门学习Demo

    技术:小程序   概述 适合学习小程序的初级开发人员,入门教程 详细 代码下载:http://www.demodashi.com/demo/14956.html 小程序周边美甲美发预约Demo 代码主 ...

  5. 阿里云提示WordPress“/wp-includes/http.php输入IP验证不当”的解决办法

    本文转自:https://www.liuzhishi.com/2931.html 标题: wordpress IP验证不当漏洞 简介: wordpress /wp-includes/http.php文 ...

  6. 删除 nuget 文件夹内容

    vs2017 ->工具->选项->NuGet 包管理器->清除所有NuGet缓存

  7. redis应用-sortedset实现排行榜(转载)

    package site.zy9.redisApp.test; import java.util.HashMap; import java.util.List; import java.util.Ma ...

  8. C# C/S程序出错:ContextSwitchDeadlock is detected

    选择菜单栏[调试]->[窗口]->[异常设置] 使用快捷键Ctrl + Alt + E,可以快速打开该对话框 通过取消勾选或者勾选进行设置即可. https://blog.csdn.net ...

  9. BTARN 接收消息流以3A7为例

     1.RNIFReceive.aspx 页接收来自发起方的传入消息. (如果发起方是BizTalk则类似于:http://localhost/BTARNApp/RNIFSend.aspx?TPUrl ...

  10. JSSDK微信支付封装的支付类方法,代码比较齐全,适合收藏

    第1肯定是配置的参数类 public class JsApiConfig { #region 字段 private string mch_id = string.Empty; private stri ...