clojure概览(编辑修改稿)内容摘要:

loop和 recur • 语言结构:顺序,条件和循环 • Clojure中没有专门的循环结构,而是通过递归来实现循环 – 递归更符合人类直觉 – 递归让代码更优雅 • loop与 let类似,但是 loop会创建一个递归点,允许 recur递归跳转 • loop和 recur并不是尾递归优化 (TCO) Macro • Macro是 Clojure元编程的主要 方式 – 扩展编译器,定义自己的语法结构 – DSLs • 什么是 Macro? – 模板语言 – C语言的预处 理器 • 例子 – unless – SQL DSLs • 函数是一等公民 ——first class • 作为参数 • 作为返回值 • 作为变量保存 • defn宏定义函数 • 高阶函数:操作函数的函数 – MapReduce Functional 高阶函数 • 代码复用 • 隔离可变部分 • 站在更高的抽象层次去思考问题 • 更易于并行 • 更易于测试 高阶函数 29 问题 Java Clojure 求数组中 0的个数 int []a={0,2,3,0,0,4}。 int count=0。 for(int i:a) if(i==0) count++ return count。 (count (filter zero? [0,2,3,0,0,4])) 求小于等于 n的 fib(k)是偶数组成的集合 ,假设已有函数fib(x) List list=… for(int i=0。 i=n。 i++){ int f=fib(i)。 if(f%2==0) (f)。 } return list (filter even? (map fib (range 0 (inc n)) )) 高阶函数 • 以信息流的方式去组织代码,高阶函数带来了约定接口的抽象 30 range: integers map: fib filter: even? Java Interop • Clojue Strings == Java Strings • Clojure Numbers == Java Numbers • Clojure Collections实现 • Clojure函数实现 Runnable和 Callable接口 • Clojure可以继承和实现 Java的类和接口 • Clojure的 seq库可以直接使用在 Java的 String和 Array以及 Iterable 31 实例 • (. Math PI) – Math/PI • (new ) – (.) • (. date getYear) – (.getYear date) • (. (. System (getProperties)) (get )) –。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。