解いた問題

12/28/2010

Clojureを使ってみた

JavaVMで動作するlisp方言らしい。
遅延シーケンス、並列コンピューティング、Javaとの連携等々が特徴。
まず試しにいつものこれ。
(println "hello Clojure!")
printlnってのがそれっぽい。
次にFizzBuzz。
(defn fizz-buzz [n]
 (if (not= n 0)
   (do
     (fizz-buzz (- n 1))
       (if (= (mod n 15) 0)
         (println "FizzBuzz")
           (if (= (mod n 5) 0)
             (println "Buzz")
               (if (= (mod n 3) 0)
                 (println "Fizz")
                   (println n)))))))

(fizz-buzz 31)
先述の通り、Javaのクラスも利用可能。試しにsqliteを使ってみる。
(import '(java.sql DriverManager)
        '(java.sql Connection)
        '(java.sql PreparedStatement)
        '(java.sql ResultSet))

(Class/forName "org.sqlite.JDBC")

(def con (DriverManager/getConnection "jdbc:sqlite:test.db"))
(def st (.createStatement con))

(.execute st "create table table1( msg string, id integer )")
(.execute st "insert into table1 values (\"Fizz\", 3)")
(.execute st "insert into table1 values (\"Buzz\", 5)")
(.execute st "insert into table1 values (\"FizzBuzz\", 15)")

(defn print-result [rs]
 (if (.next rs)
   (do
     (println (.getString rs 1) (.getInt rs 2))
     (print-result rs))))

(print-result (.executeQuery st "select * from table1"))

(.close st)
少しもlisp方言っぽくない描き方な気がするけど、気にしない。
ちなみに、わざわざJavaからやらなくてもclojure.contribというのを使えば利用できるそうな。

Clojureが無理だとしても、Blogger Syntax Highliterがlispをサポートしてないことに衝撃。
prettifierと併用。それでも微妙に変・・・。

参考にしたページを私的メモ
Clojure
「プログラミングClojure」
Clojure Javaのコンストラクタ、メソッド、フィールドへのアクセス
Clojure のエレガントなところ
SQLite from Clojure

12/18/2010

New Blog

はてなから乗り換えて心機一転
Programmingに関していろいろ投稿予定?