common lisp里的几个操作符
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里的几个操作符的更多相关文章
- common lisp 里的几个操作符(2)
集合 (Set) member 函数 默认使用 eql比较对象,可传入关键字参数 :test,作为比较的函数.关键字参数 :key,指定在每个元素上应用这个函数. > (member 2 '(( ...
- common lisp和scheme的区别
1. 在Common Lisp 眼中,一个符号的symbol-value 和symbol-function 是不一样的,而Scheme对两者不作区分.在Scheme 里面,变量只有唯一对应的值,它可以 ...
- ANSI Common Lisp Practice - My Answers - Chatper - 3
Ok, Go ahead. 1 (a) (b) (c) (d) 2 注:union 在 Common Lisp 中的作用就是求两个集合的并集.但是这有一个前提,即给的两个列表已经满足集合的属性了.具体 ...
- Common Lisp编译程序的小技巧
这几天开始玩Common Lisp,遇上了一个有意思的问题,CL一般是解释运行,也有实现可以编译生成字节码(fas文件).我正在用的两种CL实现是SBCL和CLISP,前者是我从<实用Commo ...
- Common Lisp
[Common Lisp] 1.操作符是什么? 2.quote. 3.单引号是quote的缩写. 4.car与cdr方法. 5.古怪的if语句. 6.and语句. 7.判断是真假. null 与 no ...
- 搭建fedora开发环境 common lisp, c++, go
第三方软件库: http://download1.rpmfusion.org/free/fedora/releases/25/Everything/x86_64/os/repoview/index.h ...
- Difference between LET and LET* in Common LISP
Difference between LET and LET* in Common LISP LET Parallel binding which means the bindings com ...
- scheme和common lisp 区别
Scheme and Common Lisp use different names for some of the basic system functions. Many Lisp program ...
- slime+sbcl for common lisp
sudo apt-get install slime audo apt-get install sbcl ;;sbcl+slime for common lisp ;;sudo apt-get ins ...
随机推荐
- python下的selenium和PhantomJS
一般我们使用python的第三方库requests及框架scrapy来爬取网上的资源,但是设计javascript渲染的页面却不能抓取,此时,我们使用web自动化测试化工具Selenium+无界面浏览 ...
- 用SSH登录远程的机器,在远程机器上执行本地机器上的脚本
假设本地的机器IP为10.245.111.90,我们想要在10.245.111.93上执行一个保存在10.245.111.90上的脚本. 经过测试通过的命令如下: ssh root@10.245.11 ...
- 微信支付 python版
需求: 微信打开商品列表页面-> 点击商品后直接显示付款页面-> 点击付款调用微信支付 说明 微信支付需要你申请了公众号(appid, key - 用于签名), 商户号(mch_id, A ...
- 小程序入门学习Demo
技术:小程序 概述 适合学习小程序的初级开发人员,入门教程 详细 代码下载:http://www.demodashi.com/demo/14956.html 小程序周边美甲美发预约Demo 代码主 ...
- 阿里云提示WordPress“/wp-includes/http.php输入IP验证不当”的解决办法
本文转自:https://www.liuzhishi.com/2931.html 标题: wordpress IP验证不当漏洞 简介: wordpress /wp-includes/http.php文 ...
- 删除 nuget 文件夹内容
vs2017 ->工具->选项->NuGet 包管理器->清除所有NuGet缓存
- redis应用-sortedset实现排行榜(转载)
package site.zy9.redisApp.test; import java.util.HashMap; import java.util.List; import java.util.Ma ...
- C# C/S程序出错:ContextSwitchDeadlock is detected
选择菜单栏[调试]->[窗口]->[异常设置] 使用快捷键Ctrl + Alt + E,可以快速打开该对话框 通过取消勾选或者勾选进行设置即可. https://blog.csdn.net ...
- BTARN 接收消息流以3A7为例
 1.RNIFReceive.aspx 页接收来自发起方的传入消息. (如果发起方是BizTalk则类似于:http://localhost/BTARNApp/RNIFSend.aspx?TPUrl ...
- JSSDK微信支付封装的支付类方法,代码比较齐全,适合收藏
第1肯定是配置的参数类 public class JsApiConfig { #region 字段 private string mch_id = string.Empty; private stri ...