2012-04-01から1ヶ月間の記事一覧

実装時の型と評価後の型

前回の木構造と同じようにリストを表現するとどうなるのか? def tree = { [:].withDefault{ owner.call() } } def list = { h, t -> [h, { t?.call() }] } ちょっと意味が違う気がするけど気持ちの問題の範囲なので続ける。 h は先頭の要素で、t は評価する…

{ owner.call() }

Groovy では木構造が次の形で表現できるらしい。 def tree = { [:].withDefault{ owner.call() } } def users = tree() users.harold.username = 'hrldcpr' users.yates.username = 'tim' def json = new groovy.json.JsonBuilder(users).toString() assert …

Hamming numbers in SQL

SQL-99 では再帰が使えるので、それを使って Hamming numbers を出力する。 まずは、再帰クエリが使えるデータベースを調べてみる。 再帰クエリ - Wikipedia H2 Database が一番手軽に導入できるのでこれを使ってみる。 再帰クエリの書き方 H2 Dataabse のド…

Open Books

O'Reilly では Open Books といって一部の書籍がまるまる読めるらしい。 O'Reilly Open Books Project concurrency を調べて、groovy and concurrency を見ていたら Groovy の O'Reilly 本が目に入る。 そういえばドイツ語の本があったなということで調べて…

itertools in Groovy

Generator を手に入れたので、再びハミングの問題に挑戦する。 Hamming numbers - Rosetta Code 同じように実装するためには itertools が必要だ。 Python documentation に Python で書かれた仕様が載っているのでそのまま実装する。 itertools — Functions…

Named arguments

コンパイラさんに教えてもらった。 def aMethodHasNamedArguments(Map named=[:], Object... args) { println "named=$named, args=$args" } aMethodHasNamedArguments("A", key1:1, "B", key2:2, "C") // named=[key1:1, key2:2], args=[A, B, C] aMethodHa…

Generator in Groovy

同期する Generator を java.util.concurrent パッケージを使って書いてみる。 Using BlockingQueue はじめに http://groovy.codehaus.org/Iterator+Tricks のように非同期のものを BlockingQueue で書いてみる。 def generate(Closure generator) { return …