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 ...
随机推荐
- aspx页面使用ajax遇到try catch中使用Response.End()报错
1.使用Ajax接收数据,在返回Response.Write()后应该调用Response.End()才能将数据写入到调用的页面,才能被jQuery的回调函数获取到返回的JSON数据 2.在try-- ...
- MyBatis中使用实体中使用枚举,数据库中使用数值
一.简介 本文主要讲MyBatis中使用实体中使用枚举,数据库中使用数值的解决方案.正常直接使用会报错,需要添加typeHandlers在mybatis-config.xml中. 二.解决方案 如下: ...
- CentOS7 安装FastDFS分布式文件系统
CentOS7 安装FastDFS分布式文件系统 最近要用到fastDFS,所以自己研究了一下,在搭建FastDFS的过程中遇到过很多的问题,为了能帮忙到以后搭建FastDFS的同学,少走弯路,与大家 ...
- How to trigger a Kubernetes cronjob manually-手动触发一个cronjob
What should you do when you’ve developed and installed a cron job for your Kubernetes application, a ...
- Android jks 签名文件 生成
Android Win7 上使用cmd生成Jks cmd 命令 C:\Program Files\Java\jre1.8.0_111\bin>keytool -genkeypair -alias ...
- golang:常量
今天写代码的时候才发现,go语言里面的常量不能是数组(例如:[2]byte) 于是想查一下资料搞清楚到底是什么原因导致的,从effective go查到如下介绍: 但是这里也仅仅就是介绍了一下常量类型 ...
- python多线程应用——DB2数据库备份
前言:DB2一个实例下,可以存在多个数据库,之前使用shell备份脚本,但是同一时刻只能备份一个数据库,对于几百G的备份文件,这个速度显然太慢,今天学习了Python多线程,刚好应用一下. 分析:1. ...
- Machine Learning第十一周笔记:photo OCR
博客已经迁移至Marcovaldo's blog (http://marcovaldong.github.io/) 刚刚完毕了Cousera上Machine Learning的最后一周课程.这周介绍了 ...
- hdoj:2049
#include <iostream> using namespace std; ]; /* n 个 数中 m个错排 转化为:充n个数中选取m个数,共有C(n,m)中,选取的m个数进行全部 ...
- js date 前一天
Date.prototype.Format = function (fmt) { var o = { "M+": this.getMonth() + 1, //月份 "d ...