`

c++实现类似Common Lisp的多参数加法和比较

    博客分类:
  • C++
 
阅读更多

文章来源: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 中文翻译版.pdf

    此资源是 ANSI Common Lisp 的中文翻译版,涵盖了 Common Lisp 语言的基础知识和高级主题。该资源包含了 17 章节,从基础的列表、特殊数据结构、控制流程、函数、输入与输出、符号、数字、宏、Common Lisp 对象系统...

    C++ 实现的 LISP 编译器

    在C++中实现LISP编译器,可能需要实现词法分析、语法分析和语义分析等阶段。词法分析负责识别LISP源代码中的基本单元,如数字、符号和括号;语法分析将这些单元组合成抽象语法树(AST);语义分析则检查代码的正确性...

    Common LISP书籍中文版pdf格式带书签.rar

    本压缩包包含三本关于Common Lisp的重要书籍,分别是《ANSI Common Lisp》、《On Lisp》以及《实用Common Lisp编程》,都是学习和深入理解Common Lisp的宝贵资源。 《ANSI Common Lisp》由Paul Graham撰写,是...

    Common Lisp The Language 2nd

    Common Lisp是一种功能强大的多范式编程语言,支持过程、面向对象、函数式和声明式编程风格。这本书的第二版深入探讨了Common Lisp的所有核心特性,旨在帮助读者不仅掌握语言基础,还能深入了解其高级特性和实践应用...

    Practical Common Lisp笔记

    7. **函数式编程**:Common Lisp支持高阶函数、尾递归优化和匿名函数,使得函数式编程风格得以流畅实现。 8. **面向对象编程**:虽然不是其核心特性,但Common Lisp提供CLOS(Common Lisp Object System),一个...

    Python-用CommonLisp实现的NES模拟器

    这里提到的"Python-用CommonLisp实现的NES模拟器"是一个独特的项目,它展示了如何利用两种不同的编程语言——Python和Common Lisp——来处理游戏开发中的特定任务。 **Common Lisp在NES模拟器中的作用** Common ...

    Practical Common Lisp pdf

    Common Lisp是Lisp家族中的一个广泛使用的标准版本,它集成了多种子语言,提供了丰富的库支持,包括面向对象编程、函数式编程和元编程等特性。 本书《实用Common Lisp》深入浅出地介绍了Lisp的基本概念,包括符号、...

    Common Lisp 高级编程技术

    1. **Common Lisp基础**:Common Lisp是一种通用的多范式编程语言,支持过程式、面向对象、函数式和反射等多种编程风格。书中会介绍其基本语法,包括S表达式、读取-求值-打印循环(REPL)以及Lisp代码的读取和评估机制...

    实用Common.Lisp编程

    这本《Practical Common Lisp》之所以号称Practical,正是因为这本书大量介绍Common Lisp在现实世界中的各种...本书有相当多应用程序的范例,透过本书的各个范例,你会渐渐体会到,运用Common Lisp写程序是很酷的事。

    实用Common Lisp编程

    本书首先从作者的学习经过及语言历史出发,随后用21个章节讲述了各种基础知识,主要包括:REPL 及Common Lisp 的各种实现、S- 表达式、函数与变量、标准宏与自定义宏、数字与字符以及字符串、集合与向量、列表处理、...

    ansi common lisp 教程

    新的和更强大的方法教育学生的思考程序,该文本包含一个教程的例子,说明Lisp编程的基本概念,以及ANSI Common Lisp的一个跟上时代的总结,列出每个运营商在语言。信息和乐趣,它给学生提供了他们所需要的一切,开始...

    一篇CommonLisp中文入门文章Common LISP Hints (CHM)

    一篇CommonLisp中文入门文章Common LISP Hints 从Ubuntu论坛上看到的, 觉着不错就给打包成了CHM 如果看不到请: 右键=&gt;属性=&gt;解除锁定

    Common Lisp the Language, 2nd Edition CMU HTML 英文

    3. **函数**:Common Lisp的函数可以接受任意数量的位置参数和关键字参数,支持匿名函数(lambda表达式)和递归。函数可以作为第一类对象,意味着它们可以存储在变量中,作为参数传递,也可以作为返回值。 4. **宏*...

    Successful Lisp How to Understand and Use Common Lisp - David B. Lamkins

    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和通用LISP编程LISP and Common LISP Programming

    这是LISP和Common LISP编程的上一页,我们正在处理中,将那里的所有书籍都转换为新页面。 请再次检查此页面!!!

    Common.Lisp编程 中文版本

    本书首先从作者的学习经过及语言历史出发,随后用21个章节讲述了各种基础知识,主要包括:REPL 及Common Lisp 的各种实现、S- 表达式、函数与变量、标准宏与自定义宏、数字与字符以及字符串、集合与向量、列表处理、...

    ansi common lisp documentansi common lisp document

    同时,该文档也可能包含了对 GNU Common Lisp 实现的解释,这是一个开源的 Common Lisp 编译器和运行环境,具有良好的性能和丰富的标准库。 总之,《ANSI Common Lisp 文档》是学习和深入理解这一强大语言的宝贵...

    common lisp

    Common Lisp,一般缩写为 CL(不要和缩写同为CL的組合邏輯混淆),是Lisp的方言,标准由ANSI X3.226-1994定义。它是为了标准化此前众多的Lisp分支而开发的,它本身并不是一个具体的实现而是各个Lisp实现所遵循的规范...

Global site tag (gtag.js) - Google Analytics