CL中'和`的区别
来源:互联网 发布:图腾网络机柜 9u 编辑:程序博客网 时间:2024/05/11 05:14
CL中有两种符号非常相似..那就是'和`..今天在实践MACRO的代码的时候稍微思考了下他们的区别..
其实在很多时候下,`(反引号)可以代替'(单引号)..二者共同的作用都是指示后续的整体(以括号为界)为数据对象,而不要求值..'(单引号)的功能只限于此..而且这个数据..必须确确实实的是CL的正常数据..一个普通的情况是'(单引号)之后的列表中不能出现,(逗号)..CL会提示说"出现了不该出现的逗号"
在其他情况下..一般的考虑都是`(反引号)..它具备所有'(单引号)的所有功能..而且还有自己的独特功能..就是逗号求值功能..
如(let ((x y)) `(x ,x)) 第一个x和普通的单引号情况类似..仍然是x..而第二个x则进行了逗号求值..x的值是y..所以上式结果是(x y)..
处理宏的时候..我们需要注意三层的求值范围..如(defmacro test (form) `(do-some form ,form) form)..然后进行调用(test actual)..我们得注意到..反引号之后的求值分成了三类..一种是直接字面值..如第一个form..在单引号内..而且没有逗号求值..它就是字面form不变..第二种是逗号求值..如第二个form..此时求值是得到actual的字面..也就是不对actual求值..而是直接把actual的字面(例如actual的字面是(+ 1 2))直接求值..比如第二个form就有可能是(+ 1 2)..第三种是最终求值..比如第三个form..它没有在反引号内..因此就直接是其actual的求值了..如果actual是(+ 1 2)..那么此处的form就直接是3了..
其实统一的一个想法就是宏是在操作源代码..更准确点说是操作参数..参数在宏中一般是不求值的..除非反引号逗号求值..或者直接暴露出来求值..而这两种求值是由层次差别的..希望各位仔细的体会..
我还在思考..这只是一个小的心得
- CL中'和`的区别
- GCC和CL的区别
- VC中cl.exe的用法
- VC++中cl.exe编译器的使用
- 转载-VC中cl.exe的用法
- VC++中cl.exe编译器的使用
- VC++中cl.exe编译器的使用
- CL编译器和LINK编译器的使用方法
- 简单的nasm和cl互操作
- cl和link
- vc中Error spawning cl.exe错误的解决方法.
- vc中Error spawning cl.exe错误的解决方法
- vc中Error spawning cl.exe错误的解决方法.
- VC中Error spawning cl.exe错误的解决方法.
- vc中Error spawning cl.exe错误的解决方法.
- vc中Error spawning cl.exe错误的解决方法
- VC中Error spawning cl.exe错误的解决方法
- 在CMD中使用cl.exe编译的问题
- radio的处理(checkbox也可以借鉴)
- Win32 多线程的创建方法和基本使用
- C语言 顺序栈的使用
- 非递归实现二叉树的遍历
- 收拾心情
- CL中'和`的区别
- java 山寨QQ 实现(二)
- stagefright框架(三)-選擇Video Decoder
- iPhone 开发经验教训总结参考
- C++里面的private virtual函数
- 利用原始套接字(sock_raw)编写的抓取ip数据包的小程序
- jquery浏览器滚动条
- android画图之Matrix(二)
- 【常用命令】chmod