Clojure
文章平均质量分 59
xiejianming
本来无一物,何处惹尘埃
展开
-
关于Clojure的简单介绍
*注:下面内容翻译自Clojure官网的部分内容,Clojure官网网址为:http://clojure.org/。这里仅为抛砖引玉,故此处保留原文,如觉翻译生硬不通,请移步到官网或参考下面英文部分。Clojure is a dynamic programming language that targets the Java Virtual Machine (and the CLR翻译 2011-11-09 22:40:54 · 889 阅读 · 0 评论 -
Clojure:在REPL上实现一个简单的shell(三)
这个shell,我将它做成了一个小项目,请参考这里:https://github.com/xiejianming/iRepl注意它目前仍然基于我前两篇博文所描述的机制。原创 2012-09-14 17:08:22 · 802 阅读 · 0 评论 -
Clojure:在REPL上实现一个简单的shell(二)
前文再续,书接上一回……话说上次我们已经实现了一个简单的骨架,它包括一个挂在REPL上面的钩子函数(ask函数)和入口函数(shell函数)。关于ask和shell,具体请参考这里。首先为了显得更正式点,我们对shell函数作了一点小的修改:(defn shell[& p] (let [prompt (if (empty? p) "my原创 2012-05-26 01:29:14 · 2166 阅读 · 0 评论 -
Clojure:算法练习的实现(二)——合并排序
在讨论合并排序(和分治法)的时候我们还会遇到寻找逆序对的问题。一个逆序对是这样子的:在一个数组a当中,当下标ia[j],那么(a[i], a[j])就称为一个逆序对(inversion)。在一个数组中寻找逆序对的数量常常会作为合并排序算法问题的一种变形。合并算法的主要操作在于merge函数,并且它具有n*log(2)n的时间复杂度。当要合并左、右两个有序的数组,merge函数会逐一从每个数组里原创 2012-06-06 22:55:44 · 1687 阅读 · 0 评论 -
Clojure:算法练习的实现(一)——合并排序
*本系列文章使用Clojure来实现一些经典的算法,主要目的用于记录笔者对算法的重新学习(因此可能不会有过多的说明)合并排序(Merge Sort)产生随机数组首先我们先给出一个产生随机数组的函数,这个函数随机地产生n个从1到m的整数数组:(defn rnm [n m] "Generates a n-size int array. The number ranges from原创 2012-06-04 17:08:28 · 1601 阅读 · 0 评论 -
Clojure:在REPL上实现一个简单的shell(一)
REPL是一个Clojure环境,它不能直接调用命令行/shell里面的命令,现在我们想在REPL里面实现一个shell,让它既可以像在shell里面直接对系统(或shell的内置命令)进行调用,也可以做REPL下能做的事情。上一篇中我们写了一个read程序,这个程序会要求用户输入,并将获得的输入作为一个字符串来返回:(defn ask "Ask for an input."原创 2011-12-29 16:07:48 · 1863 阅读 · 0 评论 -
Clojue:开发学习Clojure中有用的资源
学习一门新的语言工具免不了需要练手和参考别人的代码,网上这样的资源很多。有的人会去看别人实现的框架和程序成品,但笔者窃以为这样子对本身对该语言不是很熟的人会产生扰乱,因为你的注意力很可能会被别人框架/程序的实现方式(架构、实现方法、引用的工具包等)转移,因此为了能更好地集中注意力到语言的特性和使用方式上面,个人认为最好能够首先使用“自己写些程序+参考API+参考Clojure本身源码”的方式来进行原创 2012-01-06 10:42:42 · 2151 阅读 · 0 评论 -
在Eclipse中整合Leiningen -- integrate Leiningen into Eclipse using 'External Tools'
*Note: If you want to read an English version of this article, please give me a sign so that I can translate my article into English (when I am available). Or, you can refer to this one alternativel原创 2011-11-09 00:35:09 · 3215 阅读 · 2 评论 -
FP中的严格求值和懒惰求值
函数式编程语言中对表达式的求值有两种方式,它们分别是:严格求值(Strict Eval)懒惰求值(Lazy Eval)这两种求值的区别在于它们对表达式(及其子表达式)的求值顺序不同:前者严格遵循在对函数求值之前先对函数的参数进行求值,也就是说对于给出的一个表达式,严格求值会先对参数进行求值,然后将求得的值传给函数,然后再对函数进行求值;后者则在只会需要的才时候进行求值,原创 2011-11-21 15:17:47 · 1370 阅读 · 0 评论 -
Clojure:一个请求用户输入函数的实现
笔者没有发现Clojure中有类似于Common Lisp中的“read”函数,在CL中的这个read会等待用户输入,并在获得用户输入后返回输入的值。这个read函数在设计一些简单的交互程序时还是比较有用的,并且在进行REPL试验时也具有一定的用途。例如下面这个使用了请求用户输入的hello world:(defn sayhi [] (let [name (ask "what's you原创 2011-12-26 22:54:28 · 1022 阅读 · 0 评论