Common Lisp笔记(4)
来源:互联网 发布:basinmod软件下载 编辑:程序博客网 时间:2024/05/21 03:17
quote ##
特殊操作符,接受单一表达式并返回
等同于符号” ` “
(quote (+ 1 2)) 等同于`(+ 1 2)
与 list 的区别:
(quote (a b)) //两个符号本身的表(list (a b)) //两个值得表
setf 宏
通用赋值操作符
(setf variable value)
是宏,不是特殊操作符,可以检测所赋值的 variable 的形式,并展开成适当的底层操作来修改那个位置。
当该位置是变量时,它展开成一个对特殊操作符 setq 的调用, setq 可访问到词法和动态绑定。
因为所有的变量都是引用,所以为一个绑定赋新值对该变量的其他绑定没有效果,且对赋值之前绑定上保存的值也没有影响。、
setf 返回最近被赋的值。
所有的复制都可以用 setf
修改宏
(setf x (+ x 1)) //等同于(incf x 1)(setf x (- x 10) //等同于(decf x 10)
像 incf , decf 这种宏称为修改宏 (modify macro)
修改宏是建立在 setf 之上的宏
好像上面的例子中好像修改宏并没有多大用处,请看下面例子
//修改宏(incf (aref *array* (random (length *array*))))// setf(setf (aref *array* (random (length *array*))) (aref *array* (random (length *array*))))// aref 访问数组// (aref array index)
很明显下面的 setf 宏写的并不能像上面的修改宏一样达到数组随机一个位置修改,如果想达到这个目的,只能很麻烦的这么写
(let ((tmp (random (length *array*)))) (setf (aref *array* tmp) (+1 (aref *array* tmp))))
rotatef shiftf 修改宏 :
// 轮换 a b 返回 nil (rotatef a b)// 等同于(let ((tmp a)) (setf a b b tmp) nil)
shiftf 后面的值向左移动赋值
rotatef 和 shiftf 都可跟多个参数,和所有修改宏一样,可以保证从左到右顺序,每个参数只求值一次。
progn
按顺序执行任意数量的形式并返回最后一个形式的值,类似大括号,C 语言的逗号。
1 0
- Common Lisp笔记(4)
- Common Lisp 笔记(4)
- Common Lisp 笔记(1)
- Common Lisp笔记(2)
- ANSI Common Lisp译本笔记4
- COMMON LISP语言学习笔记(一)
- Common Lisp学习笔记之一(序章)
- Practical Common Lisp学习笔记(一)
- Common Lisp 学习笔记(1)
- Common Lisp笔记(3)函数定义
- Common Lisp入门笔记(四)函数
- common lisp 学习笔记
- Common lisp 笔记1
- Common Lisp 学习笔记
- common lisp 学习之路(4)
- 学习common lisp 笔记二
- 学习Common lisp 笔记三
- ANSI Common Lisp 笔记一
- Android 类似广播的增强版框架-EventBus
- 斯坦福课程之storyboard与模拟器显示不一致的问题
- wustoj 1590: As Many Princesses as Possible 树形dp 好题 ★
- C# 委托(Delegate)
- github配置ssh
- Common Lisp笔记(4)
- C++学习笔记之——引用 内联函数
- 四.两种高效的并发模式
- 登录phpMyAdmin出现密码不正确问题
- Android 好用的安卓抓包工具-Fiddler
- 新的开始
- JSON
- 数字证书原理,公钥私钥加密原理
- 数论基础——循环节和矩阵快速幂的运用