摘要:
Clojure和JavaClojure的代码是被编译为java字节码而执行的,因此Clojure和Java代码的集成度相当高,这也是很多人学习Clojure的原因,因为跟Lisp这样的语言相比,它不仅仅具备强大的表达能力,同时也能尽可能的利用现有的‘智力遗产’。如何访问构造函数、方法和域Clojure中提供了new关键字来生成一个对象 (new classname),生成的对象可以用def语句绑定到某个变量之上,绑定之后便可以用 . 运算符来访问该对象的方法:(def rnd (new java.util.Random))(. rnd nextInt)-791474443对于方法调用的参数,则 阅读全文
摘要:
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 阅读全文
摘要:
由于有过一点点Lisp的基础,所以这个笔记可能并不能完全适应于给别人参考,只是自己学习Clojure的一些笔记。流控制Clojure和Lisp类似,都只提供了非常少的流控制语句,从语言设计的初衷来看,函数式语言应该尽量缩短每一个函数的大小,减少复杂的函数内流控制语句。复杂的逻辑应该由函数之间的调用来实现。if举例如下:(defn is-small? [number] (if (< number 100) "yes"))if语句在Lisp中不是函数,因为正常的函数调用都会先对所有的参数求值,之后再调用函数。而if语句的需求(如果条件为真才执行)又不允许对参数先求值,因此 阅读全文