思いつきでやってみた。意外と面白かった。
ちゃんと動くかは自信がない。
関数を定義するときに [ ] を使わないといけないのは気にしない。
3/25/2012
5/20/2011
sleep sort in clojure
話題のSleepSortを描いてみた。
やることは、
・配列の要素と同じ数のスレッドを作る。
・各スレッドは、1つの整数を受け取り、その時間だけsleepする。
・数字を返す。
wait() ==>> notifyAll() ==>> sleep() で実現したかったけど、やり方がよく分からない。
notifiAllしないと微妙に順番が変わる可能性がある? いや、したとしても、変わるか?
とりあえず、sleepする時間を10倍。
4chan BBS – Genius sorting algorithm: Sleep sort
やることは、
・配列の要素と同じ数のスレッドを作る。
・各スレッドは、1つの整数を受け取り、その時間だけsleepする。
・数字を返す。
wait() ==>> notifyAll() ==>> sleep() で実現したかったけど、やり方がよく分からない。
notifiAllしないと微妙に順番が変わる可能性がある? いや、したとしても、変わるか?
とりあえず、sleepする時間を10倍。
(defn sleep-sort [ a ] (if (not (empty? a)) (do (.start (Thread. (fn [] (Thread/sleep (* (first a) 10)) (println (first a))))) (sleep-sort (rest a))))) (sleep-sort '(6 1 2 3 7 4 8 9 5 0))参考サイト
4chan BBS – Genius sorting algorithm: Sleep sort
12/28/2010
Clojureを使ってみた
JavaVMで動作するlisp方言らしい。
遅延シーケンス、並列コンピューティング、Javaとの連携等々が特徴。
まず試しにいつものこれ。
次にFizzBuzz。
ちなみに、わざわざJavaからやらなくてもclojure.contribというのを使えば利用できるそうな。
Clojureが無理だとしても、Blogger Syntax Highliterがlispをサポートしてないことに衝撃。
prettifierと併用。それでも微妙に変・・・。
参考にしたページを私的メモ
Clojure
「プログラミングClojure」
Clojure Javaのコンストラクタ、メソッド、フィールドへのアクセス
Clojure のエレガントなところ
SQLite from Clojure
遅延シーケンス、並列コンピューティング、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
登録:
投稿
(
Atom
)