lisp中的cons】的更多相关文章

看到ANSI Common Lisp 第三章的游程编码时,就发现作者很准确的使用了list和cons来生成目标列表,虽然list是由cons扩展而来,区别也仅仅是最后一个元素的加入方式,于是勾起了之前对cons的疑问. 当看到下面的这样的代码: (cons '(a b) '(c d)) 你会觉得输出结果是 ((a b) (c d)) 还是 ((a b) c d) 虽然敲入一下代码,就知道是后者,可是,为什么呢? 仔细看第三章cons的说明,发现cons放在c语言里面,无非就是一个如下的结构 ty…
Handling Automation errors in Visual LISP 翻译自原文Kean's blog:http://through-the-interface.typepad.com/through_the_interface/2006/08/handling_automa.html 自从VLisp被推广,开发者便利用它的能力优势来引用COM自动化接口.这种使LISP平台增加许多新的扩展的功能,就像你能通过召唤ObjectARX 程序来实现定义LISP函数.但是,自动操作LISP…
当你把  xx 当做符号使用时   'xx  ,  这个符号是没有任何函数/变量语义的, 仅仅是一个 符号而已(就像一个string一样) 但你可以对这个string有其他的用法,比如使用它所binding的同名函数.使用它所binding的同名动态变量 (要知道,“代码” 不过是 一串String, 这就是 Macro所做的事) 你把Symbol当成一种可绑定函数.变量的东西就可以了! 可以看到,  上图的 defun inc 和 defmacro inc 的内部实现时一模一样的. 它们其实都…
一.编写步骤 1.编写示例的宏调用以及它应当展开的代码,反之亦然. 2.编写从示例调用中生成手写展开式的代码. 3.确保宏抽象不产生"泄露". 二.遵循规则 1.除非有特殊理由,否则需要将展开式中任何子形式放在一个位置上,使其求职顺序与宏调用的子形式相同. 2.除非有特殊理由,否则要确保子形式仅被求值一次,方法是在展开式中创建变量来持有求值参数形式所得到的值,然后在展开式中所有需要用到该值的地方使用这个变量. 3.在宏展开期使用GENSYM来创建展开式中用到的变量名.…
ANSI Common Lisp 第二章 课后习题 7.只使用本章所介绍的操作符,定义一个函数,它接受一个列表作为实参,如果有一个元素是列表时,就返回真. (defun have-list (lst) (if (null lst) nil (do ((i lst (setf i (cdr i))) (exis nil)) ((null i) exis) (setf exis (and (listp (car i)) (not (null i))))))) 测试如下 当看到(have-list '…
前言 现在大多数程序设计语言中都有表达式和/或对象的类型概念.类型起着两种主要作用: 为许多操作提供了隐含的上下文信息,使程序员可以在许多情况下不必显示的描述这种上下文.比如int类型的两个对象相加就是整数相加.两个字符串类型的对象相加就是拼接字符串.在Java和C#中new object()隐含在背后的就是要分配内存返回对象的引用等等. 类型描述了其对象上一些合法的可以执行的操作集合.类型系统将不允许程序员去做一个字符和一个记录的加法.编译器可以使用这个合法的集合进行错误检查,好的类型系统能够…
Ok, Go ahead. 1 (a) (b) (c) (d) 2 注:union 在 Common Lisp 中的作用就是求两个集合的并集.但是这有一个前提,即给的两个列表已经满足集合的属性了.具体的操作过程似乎是对第一个 list 中的每一个元素在第二个 list 中查找,如无则标记一下:待第一个 list 的所有元素在第二个 list 中查完以后将所有标记过的元素放入一个 list 中与第二个 list 进行合并.这意味着,如果刚开始给的两个 list 不完全满足集合的属性,则会有重复出现…
此教程是我花了一点时间和功夫整理出来的,希望能够帮到喜欢Lisp(Common Lisp)的朋友们.本人排版很烂还望多多海涵! <Lisp简明教程>PDF格式下载 <Lisp简明教程>ODT格式下载 具体的内容我已经编辑好了,想下载的朋友可以用上面的链接.本人水平有限,如有疏漏还望之处(要是有谁帮我排排版就好了)还望指出!资料虽然是我整理的,但都是网友的智慧,如果有人需要转载,请至少保留其中的“鸣谢”页(如果能有我就更好了:-)). Lisp简明教程 整理人:Chaobs 邮箱:c…
以前我一直不能理解LISP里引用的作用,感觉引用和字符串没什么区别.比如:> (define (func)     'ok) > (func) 'ok 这里把引用ok当做了函数func的返回值. 但是我在实现函数式汉语编程的时候,我把代码构造成了一个多叉的语法树,这时候对某一段代码的引用,就是不对代码Eval,直接返回语法树的根节点.类似于: > '(car (a b)) '(car (a b))可是LISP中的引用实际上是一个construct,它可以被car.cdr.即:> (…
原文:http://www.paulgraham.com/rootsoflisp.html 约翰麦卡锡于1960年发表了一篇非凡的论文,他在这篇论文中对编程的贡献有如 欧几里德对几何的贡献.1 他向我们展示了,在只给定几个简单的操作符和一个 表示函数的记号的基础上, 如何构造出一个完整的编程语言. 麦卡锡称这种语 言为Lisp, 意为List Processing, 因为他的主要思想之一是用一种简单的数据 结构表(list)来代表代码和数据. 值得注意的是,麦卡锡所作的发现,不仅是计算机史上划时…