- 浏览: 84791 次
- 性别:
- 来自: 成都
最新评论
-
荆人七十:
谢谢分享~
在eclipse上面搭建Clojure开发运行环境 -
lanily:
楼主,跟你学clojure了,我想请教一个问题:本人事先是用j ...
Clojure细节之form和special form的区别 -
Dead_knight:
http://code.google.com/p/clojur ...
practical_clojure chapter3 控制程序流(未完) -
石建武:
谢谢。提供的离线包。但如果通过‘install new’方式, ...
在eclipse上面搭建Clojure开发运行环境 -
songry:
linkerlin 写道标题里面的 未完 ,啥时候能去掉?可以 ...
practical_clojure chapter3 控制程序流(未完)
文章列表
前言
在lisp程序员看来,form和special form的区别是一目了然而且无需解释的--因为这两个
概念本身就源自lisp.但对于指令式语言的开发人员而言,当他们进入clojure的世界中,会不
断看到和听到这两个名词,然后会把special form理解为某种关键字或者是宏之类的东西.
这样的理解实际上是有一定偏差的.
form
首先让我们来看看Clojure中的form,最简单的form就是由函数和它的参数们构成:
(+ 1 2 3 4)
+是一个函数,后面的1,2,3,4都是这个函数的实际参数.执行这个form的过程是对所有的
参数进行求值 ...
编译环境:
fedora16
gcc (GCC) 4.6.3 20120306 (Red Hat 4.6.3-2)
java version "1.6.0_31"
Java(TM) SE Runtime Environment (build 1.6.0_31-b04)
Java HotSpot(TM) Server VM (build 20.6-b01, mixed mode)
准备工作:
首先需要安装jdk和gcc(或者其他c编译器也可以)并配置相应的环境变量(可自行在网上搜索,这个资料很多的),配好之后在命令行运行gcc --v ...
clojure调用java方法时参数问题
- 博客分类:
- Clojure
众所周知,clojure基于jvm,可以在不做引入的情况下调用java.lang下面的任意对象,但是,在调用交互中
需要注意clojure中的自定义类型,下面我们用代码来说明一下。
下面的例子是采用牛顿法求平方根
的clojure实现:
user> (defn average [x y] (/ (+ x y) 2)) ;定义求平均值函数
user> (defn good-enough? [guess x] ;定义平方根的精确度
(< (Math/abs (- (* guess guess) x)) 0.001))
use ...
换零钱的clojure实现
- 博客分类:
- Clojure
题目:有半美元、四分之一美元、10美分、5美分和1美分的硬币,将1美元换成零钱,一共有多少种不同方式?
思路:
首先我们把1美元变成100美分,半美元变成50美分,四分之一美元变成25美分。然后从硬币的最大面额
5 ...
注:本文基于jdk1.6,clojure1.2
字符串连接str
严格来说,str并非仅用于连接字符串,实际上针对任何对象,它都能获取到对象的toString()并进行连接。
这样说起来有些费解,看看实际的例子就明了了:
user> (str "a& ...
冒泡排序的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:
首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和
第3个数,将小数放前,大数放后
,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。
在第二趟:仍从第一对数
开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),
将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已
经是最大的),第二趟结束,
在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,
...
原帖地址:http://java.ociweb.com/mark/clojure/article.html#Databases
作者:R. Mark Volkmann
译者:RoySong
数据库
Clojure Contrib
中的sql库简化了对关系型数据库的访问,它支持事务提交回滚、预声明、创建和删除表、插入
更新删除记录和运行条件查询。下面的例子连接到一个Postgres数据库并运行了查询。注释中增加了对mysql数据库
的支持。
(use 'clojure.contrib.sql)
(let [db-host "localhost&qu ...
注:本文基于jdk1.6,clojure1.2
比较操作
等于=
clojure中的等于和java中的equals方法类似,但是clojure中的=还能够作用于nil、数字和集合上面。看看例子:
user> (= 3)
true
user> (= 5 5)
true
user> (= "a" "a")
true
us ...
附注:本文基于jdk1.6,clojure1.2
数学运算
让我们通过学习clojure的API来一步步了解它,首先是最简单的数学运算。
加法+
API中对加法函数的描述是:
clojure.core/+
([] [x] [x y] [x y & more])
Returns the sum of nums. (+) ret ...
原帖地址:http://java.ociweb.com/mark/clojure/article.html#WebApps
作者:R. Mark Volkmann
译者:RoySong
Web应用
有多种Clojure库来创建Web应用。一个常见的选择是采用Compojure,可以从
http://github.com/weavejester/compojure/tree/master
获得。最新的版本可以从Git
资源库中获取到(假设
已经安装了Git):
git clone git://github.com/weavejester/c ...
原帖地址:http://java.ociweb.com/mark/clojure/article.html#DesktopApps
作者:R. Mark Volkmann
译者:RoySong
桌面应用
Clojure可以被用来构建基于Swing的图形桌面应用,下面是一个简单的例子,允许用户输入名字,点击"Greet"
按钮,然后就会出现一个欢迎对话框。注意如何采用proxy宏从指定的java类(在这个例子中是JFrame)或者任意数目
的接口(在这个例子中仅有ActionListener
)来实现一个java对象:
(ns c ...
原帖地址:http://java.ociweb.com/mark/clojure/article.html#EditorsIDEs
作者:R. Mark Volkmann
译者:RoySong
编辑器和开发环境(Editors And Ides)
Clojure拥有很多编辑器和开发环境的插件。emacs上面有clojure-mode和swank-clojure,都在
http://github.com/jochu
。swank-clojure采用了Superior Lisp Interaction Mode for Emacs
(Slime) ...
原帖地址:http://java.ociweb.com/mark/clojure/article.html#Testing
作者:R. Mark Volkmann
译者:RoySong
自动化测试
Clojure基本的自动化测试框架就在Clojure核心代码的测试库中。下面的代码展示了它的主要功能:
(use 'clojure.test)
; Tests can be written in separate functions.
(deftest add-test
; The "is" macro takes a predicate ...
原帖地址:http://java.ociweb.com/mark/clojure/article.html#Compiling
作者:R. Mark Volkmann
译者:RoySong
编译(compiling)
当Clojure源文件做为脚本执行时,它们将在运行时被编译为java字节码。它们同样可以提前编译为java字节码(AOT)。
这改善了Clojure应用的启动时间,并生产了可以运用于java中的.class文件。以下是推荐的步骤:
为将进行编译的源文件选择一个命名空间,比如,com.ociweb.talk
在同一个目录下面创建"sr ...
注:本文基于jdk1.6和Clojure1.2
策略模式
策略模式是指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。比如每个人都要“交个人所得税”,
但是“在美国交个人所得税”和“在中国交个人所得税”就有不同的算税方法。(维基百科)
在面向对象语言中,这可能是最常见的模式,可能很多人在听说过这个算法之前就已经使用过它了。
首先,我们定义一个策略接口:
/**
* 缴税策略接口
* @author RoySong
*/
public interface IPayTaxStrategy {
/**
* 根 ...