Kick Start Clojure

今日はShibuya.lispClojure尽くしを味わってきたわけで

感動のあまりこんなものまで買ってきてしまった.

プログラミングClojure

プログラミングClojure

というわけで,Closureをはじめてみる.

インストール

Unix系環境で,java6がインストールされている事を確認.

つぎに本家よりパッケージをダウンロードし

解凍して出来たフォルダごと'/usr/lcoal'あたりに移動する.

$ sudo mv closure-1.1.0 /usr/local/closure/

つぎにここを参照する実行ファイルを作っておく./usr/local/binに'clojure'をつくる.

#!/bin/sh

java -cp /usr/local/clojure/clojure-1.1.0/clojure.jar clojure.main $@

で実行パーミッションを与えておく.

これで

$ clojure
user=>

という具合にREPLが起動する.

そしたら,恒例Emacs用のモードのインストール

こちらでclosure-modeを作ってらっしゃるので

インストールする.

ゆるくベンチ

せっかくなので,ベンチマークとってみる.

比較として,Scheme(Gauche)と対決してみる.
(処理系の実装方式の違い,テストコードが思いつきな点,全てがいい加減なので参考程度にしてください)

以下のコードを走らせる.

fib.clj (Clojure用)

(defn fib [n]
  (loop [i 0 x 0 y 1]
    (if (= i n)
      x
      (recur (+ i 1) y (+ x y)))))

(fib 100000)

fib.scm (Scheme用)

(define (fib n)
  (let loop ((i 0) (x 0) (y 1))
    (if (= i n)
	x
	(loop (+ i 1) y (+ x y)))))

(fib 100000)

結果

$ time clojure fib.clj

real 0m1.514s
user 0m1.693s
sys 0m0.118s
$ time gosh fib.scm

real 0m0.948s
user 0m0.898s
sys 0m0.030s

なるほど,gaucheの方が早い訳ですね...

うーん,そもそも今回示したコードでは魅力が伝わりません.

次回はなんか面白い事を書こうと思います.続く...