文章来源: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的重要书籍,分别是《ANSI Common Lisp》、《On Lisp》以及《实用Common Lisp编程》,都是学习和深入理解Common Lisp的宝贵资源。 《ANSI Common Lisp》由Paul Graham撰写,是...
Common Lisp是一种功能强大的多范式编程语言,支持过程、面向对象、函数式和声明式编程风格。这本书的第二版深入探讨了Common Lisp的所有核心特性,旨在帮助读者不仅掌握语言基础,还能深入了解其高级特性和实践应用...
7. **函数式编程**:Common Lisp支持高阶函数、尾递归优化和匿名函数,使得函数式编程风格得以流畅实现。 8. **面向对象编程**:虽然不是其核心特性,但Common Lisp提供CLOS(Common Lisp Object System),一个...
这里提到的"Python-用CommonLisp实现的NES模拟器"是一个独特的项目,它展示了如何利用两种不同的编程语言——Python和Common Lisp——来处理游戏开发中的特定任务。 **Common Lisp在NES模拟器中的作用** Common ...
Common Lisp是Lisp家族中的一个广泛使用的标准版本,它集成了多种子语言,提供了丰富的库支持,包括面向对象编程、函数式编程和元编程等特性。 本书《实用Common Lisp》深入浅出地介绍了Lisp的基本概念,包括符号、...
1. **Common Lisp基础**:Common Lisp是一种通用的多范式编程语言,支持过程式、面向对象、函数式和反射等多种编程风格。书中会介绍其基本语法,包括S表达式、读取-求值-打印循环(REPL)以及Lisp代码的读取和评估机制...
这本《Practical Common Lisp》之所以号称Practical,正是因为这本书大量介绍Common Lisp在现实世界中的各种...本书有相当多应用程序的范例,透过本书的各个范例,你会渐渐体会到,运用Common Lisp写程序是很酷的事。
本书首先从作者的学习经过及语言历史出发,随后用21个章节讲述了各种基础知识,主要包括:REPL 及Common Lisp 的各种实现、S- 表达式、函数与变量、标准宏与自定义宏、数字与字符以及字符串、集合与向量、列表处理、...
新的和更强大的方法教育学生的思考程序,该文本包含一个教程的例子,说明Lisp编程的基本概念,以及ANSI Common Lisp的一个跟上时代的总结,列出每个运营商在语言。信息和乐趣,它给学生提供了他们所需要的一切,开始...
一篇CommonLisp中文入门文章Common LISP Hints 从Ubuntu论坛上看到的, 觉着不错就给打包成了CHM 如果看不到请: 右键=>属性=>解除锁定
3. **函数**:Common Lisp的函数可以接受任意数量的位置参数和关键字参数,支持匿名函数(lambda表达式)和递归。函数可以作为第一类对象,意味着它们可以存储在变量中,作为参数传递,也可以作为返回值。 4. **宏*...
Provides an overview of Common Lisp for the working programmer. Introduces key concepts in an easy-to-read format. Describes format, typical use, and possible drawbacks of all important Lisp ...
这是LISP和Common LISP编程的上一页,我们正在处理中,将那里的所有书籍都转换为新页面。 请再次检查此页面!!!
本书首先从作者的学习经过及语言历史出发,随后用21个章节讲述了各种基础知识,主要包括:REPL 及Common Lisp 的各种实现、S- 表达式、函数与变量、标准宏与自定义宏、数字与字符以及字符串、集合与向量、列表处理、...
同时,该文档也可能包含了对 GNU Common Lisp 实现的解释,这是一个开源的 Common Lisp 编译器和运行环境,具有良好的性能和丰富的标准库。 总之,《ANSI Common Lisp 文档》是学习和深入理解这一强大语言的宝贵...
Common Lisp,一般缩写为 CL(不要和缩写同为CL的組合邏輯混淆),是Lisp的方言,标准由ANSI X3.226-1994定义。它是为了标准化此前众多的Lisp分支而开发的,它本身并不是一个具体的实现而是各个Lisp实现所遵循的规范...