摘要: Clojure和JavaClojure的代码是被编译为java字节码而执行的,因此Clojure和Java代码的集成度相当高,这也是很多人学习Clojure的原因,因为跟Lisp这样的语言相比,它不仅仅具备强大的表达能力,同时也能尽可能的利用现有的‘智力遗产’。如何访问构造函数、方法和域Clojure中提供了new关键字来生成一个对象 (new classname),生成的对象可以用def语句绑定到某个变量之上,绑定之后便可以用 . 运算符来访问该对象的方法:(def rnd (new java.util.Random))(. rnd nextInt)-791474443对于方法调用的参数,则 阅读全文
posted @ 2011-10-18 23:24 MMJX 阅读(1772) 评论(0) 推荐(2) 编辑
摘要: Metadataidentical? 和 java 中的 == 运算符是一个意思。= 和 java 中的 equal 函数是一个意思。Metadata在Clojure中可以不改变数据的情况下给数据增加metadata,使用with-meta宏和meta宏(def stu {:name "Stu" :email "stu@thinkrelevance.com"})(def serializable-stu (with-meta stu {:serializable true}))那么取数据的结果如下:(meta stu) nil(meta serializ 阅读全文
posted @ 2011-10-18 18:18 MMJX 阅读(755) 评论(0) 推荐(0) 编辑
摘要: 由于有过一点点Lisp的基础,所以这个笔记可能并不能完全适应于给别人参考,只是自己学习Clojure的一些笔记。流控制Clojure和Lisp类似,都只提供了非常少的流控制语句,从语言设计的初衷来看,函数式语言应该尽量缩短每一个函数的大小,减少复杂的函数内流控制语句。复杂的逻辑应该由函数之间的调用来实现。if举例如下:(defn is-small? [number] (if (< number 100) "yes"))if语句在Lisp中不是函数,因为正常的函数调用都会先对所有的参数求值,之后再调用函数。而if语句的需求(如果条件为真才执行)又不允许对参数先求值,因此 阅读全文
posted @ 2011-10-18 12:10 MMJX 阅读(936) 评论(0) 推荐(1) 编辑
摘要: Google提出的MapReduce编程框架能够很好的解决大规模数据的排序问题,这也是Hadoop这个MapReduce开源实现中直接将TeraSort作为发布版的测试用例的原因吧。Yahoo!还拿这个参加了TeraSort的比赛,拿了个‘冠军’。其实MapReduce框架能够用来进行排序的原因很简单:Map阶段和Reduce阶段都会自动进行排序。但是显而易见的是,函数式编程中所指的map和reduce原语都是没有排序动作的。因此在本文中,我们将尝试使用函数式编程中的map和reduce语义来探讨一下排序算法。From Wikipedia:"In many programming l 阅读全文
posted @ 2011-10-17 17:38 MMJX 阅读(1383) 评论(0) 推荐(1) 编辑