`
songry
  • 浏览: 82996 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论
文章列表
前言     在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基于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 ...
题目:有半美元、四分之一美元、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 { /** * 根 ...
Global site tag (gtag.js) - Google Analytics