文章来源:http://www.itnose.net/detail/6050431.html 更多文章:http://www.itnose.net/type/55.html
在CL里我们可以这样:
1 $ sbcl 2 * (+ 1 2 3) 3 6 4 * (< 1 2 3) 5 T 6 * (< 2 3 1) 7 NIL 8 *
从简单的方面看, CL的+和<就是一个接收多参数的函数,有点类似cpp的add(1,2,3)和less(1,2,3)这样.
所以当C++11开始有了变参模板以后, 就可以玩多参数的加法和多参数比较了
1 #include <functional> 2 template<typename O, typename A,typename B> 3 bool cmp(O o, A a,B b){ 4 return o(a, b); 5 } 6 template<typename O, typename A,typename B,typename... C> 7 bool cmp(O o,A a,B b,C... c){ 8 return o(a, b) and cmp(o,b,c...); 9 } 10 template<typename O, typename A,typename B> 11 A reduce(O o, A a,B b){ 12 return o(a, b); 13 } 14 template<typename O, typename A,typename B,typename... C> 15 A reduce(O o,A a,B b,C... c){ 16 return reduce(o,o(a, b),c...); 17 } 18 19 bool foo(int a,int b,int c,int d){ 20 return cmp(std::less<int>(), a,b,c,d); 21 } 22 int bar(int a,int b,int c,int d){ 23 return reduce(std::plus<int>(), a,b,c,d); 24 }
可能有人会说,这不是坑爹么, 先不管写法比CL的丑, 你还递归调用了,简直弱爆了.....
让我们来看看真相(clang):
1 foo(int, int, int, int): # @foo(int, int, int, int) 2 cmpl %esi, %edi 3 jge .LBB0_1 4 cmpl %edx, %esi 5 setl %sil 6 cmpl %ecx, %edx 7 setl %al 8 andb %sil, %al 9 ret 10 .LBB0_1: 11 xorl %eax, %eax 12 ret 13 14 bar(int, int, int, int): # @bar(int, int, int, int) 15 addl %esi, %edi 16 leal (%rdi,%rdx), %eax 17 addl %ecx, %eax 18 ret
和手写的完全没差噢, 稍微是丑一点,不过你看下CL的汇编, 肯定比C++的慢....(逃
最后,这有啥用?
多参数加法似乎是没啥用处了,还不如写a+b+c+d呢
多参数比较还行
a < b and b < c and c < d
相关推荐
此资源是 ANSI Common Lisp 的中文翻译版,涵盖了 Common Lisp 语言的基础知识和高级主题。该资源包含了 17 章节,从基础的列表、特殊数据结构、控制流程、函数、输入与输出、符号、数字、宏、Common Lisp 对象系统...
在C++中实现LISP编译器,可能需要实现词法分析、语法分析和语义分析等阶段。词法分析负责识别LISP源代码中的基本单元,如数字、符号和括号;语法分析将这些单元组合成抽象语法树(AST);语义分析则检查代码的正确性...
Common Lisp中的Common Lisp Object System (CLOS)提供了多重继承和多态性的支持,使得面向对象编程在Common Lisp中成为可能。 #### 5. 跨平台性 Common Lisp编写的程序可以在多种操作系统上运行,包括Windows、...
11. **Common Lisp对象系统(CLOS)**:作为面向对象编程的支持框架,CLOS允许开发者定义类和对象,实现继承、多态等特性。本章会详细介绍CLOS的基本原理和用法。 12. **结构(Structure)**:本章介绍了一种类似于...
Common Lisp是一种功能强大的多范式编程语言,支持过程、面向对象、函数式和声明式编程风格。这本书的第二版深入探讨了Common Lisp的所有核心特性,旨在帮助读者不仅掌握语言基础,还能深入了解其高级特性和实践应用...
7. **函数式编程**:Common Lisp支持高阶函数、尾递归优化和匿名函数,使得函数式编程风格得以流畅实现。 8. **面向对象编程**:虽然不是其核心特性,但Common Lisp提供CLOS(Common Lisp Object System),一个...
4. 面向对象编程(CLOS):Common Lisp支持多种编程范式,其中面向对象编程是通过Common Lisp对象系统(Common Lisp Object System,简称CLOS)实现的。CLOS不仅支持类和继承,还支持多重方法分派、组合设计模式等...
本压缩包包含三本关于Common Lisp的重要书籍,分别是《ANSI Common Lisp》、《On Lisp》以及《实用Common Lisp编程》,都是学习和深入理解Common Lisp的宝贵资源。 《ANSI Common Lisp》由Paul Graham撰写,是...
Common Lisp是Lisp家族中的一个广泛使用的标准版本,它集成了多种子语言,提供了丰富的库支持,包括面向对象编程、函数式编程和元编程等特性。 本书《实用Common Lisp》深入浅出地介绍了Lisp的基本概念,包括符号、...
本书不仅是对Common Lisp语言特性的全面介绍,还包含了丰富的实践指导和理论基础,对于理解Lisp家族语言乃至整个编程领域都有着不可忽视的价值。 ### Common Lisp简介 Common Lisp是一种高级的通用编程语言,它...
1. **Common Lisp基础**:Common Lisp是一种通用的多范式编程语言,支持过程式、面向对象、函数式和反射等多种编程风格。书中会介绍其基本语法,包括S表达式、读取-求值-打印循环(REPL)以及Lisp代码的读取和评估机制...
《Practical Common Lisp-1st-2005》是一本专注于Common Lisp编程语言的实用书籍,作者Peter Seibel通过这本书向读者展示了如何使用Common Lisp来解决真实世界中的问题,强调程序员作为工程师和艺术家的双重身份,而...
这本《Practical Common Lisp》之所以号称Practical,正是因为这本书大量介绍Common Lisp在现实世界中的各种...本书有相当多应用程序的范例,透过本书的各个范例,你会渐渐体会到,运用Common Lisp写程序是很酷的事。
2. **函数定义**:在Common Lisp中,函数可以接受符号作为参数,并返回新的符号或表达式。 3. **宏定义**:宏是一种特殊的函数形式,它可以接受符号作为输入,并在编译时生成新的代码。 4. **元编程**:通过使用符号...
综上所述,《ANSI Common Lisp》不仅适合初次接触Lisp语言的新手,也能让有一定基础的开发者获得新的灵感和见解。无论你是想学习一门新语言还是希望通过实践提升编程能力,《ANSI Common Lisp》都将是你不可或缺的...
- **阅读相关书籍**:除了《Common Lisp: A Gentle Introduction to Symbolic Computation》外,还可以参考其他经典的Lisp书籍,如《On Lisp》和《Practical Common Lisp》等。 总之,《Common Lisp: A Gentle ...
新的和更强大的方法教育学生的思考程序,该文本包含一个教程的例子,说明Lisp编程的基本概念,以及ANSI Common Lisp的一个跟上时代的总结,列出每个运营商在语言。信息和乐趣,它给学生提供了他们所需要的一切,开始...
一篇CommonLisp中文入门文章Common LISP Hints 从Ubuntu论坛上看到的, 觉着不错就给打包成了CHM 如果看不到请: 右键=>属性=>解除锁定
本书首先从作者的学习经过及语言历史出发,随后用21个章节讲述了各种基础知识,主要包括:REPL 及Common Lisp 的各种实现、S- 表达式、函数与变量、标准宏与自定义宏、数字与字符以及字符串、集合与向量、列表处理、...