2011-05-01から1ヶ月間の記事一覧

Closure.DONE

Closure は便利だけれども Groovy の場合は途中で break や return *1ができない。 値を返す必要がないときは each より for を使っているが内部イテレータが必要な場合は先に findAll でフィルタリングしている。 でも Groovy も一部のメソッドは break の…

Bitwise operation

Java と Groovy のビット演算のメモ 基本 参考: http://leepoint.net/notes-java/data/expressions/bitops.html assert (3 & 5) == 1 // AND assert (3 | 5) == 7 // OR assert (3 ^ 5) == 6 // XOR assert ~3 == -4 // NOT assert (3 << 2) == 12 assert (…

Saruman's Army

『プログラミングコンテストチャレンジブック』 から N 個の点が直線上にあります。点 i の位置は Xi です。N 個のうちいくつかの点を選び、それらの点に印を付けます。N 個のすべての点について、距離が R 以内の場所に印を付けられた点がなければなりませ…

Best Cow Line

『プログラミングコンテストチャレンジブック』 から N 文字の文字列 S が与えられ、N 文字の文字列 T を作ります。はじめは T は長さ 0 の文字列で、次のいずれかの操作が行えます。 S の先端を 1 文字削除し、T の末尾に追加する S の末尾を 1 文字削除し…

Y combinator

Y combinator について分かった(気がする)範囲のメモ 『Scheme 手習い』 9章 この章が難しくて悩んでいたのだけど理由が分かった。 Learning Programming Languages with Koans によると*1『Scheme 手習い』は Koan の元になっているようだ。 各章はあるテー…

Re: そのコード、本当に最適化されてますか?

Nagai Masato 氏の Exploring Groovy 1.8 Part 1 - そのコード、本当に最適化されてますか? を読んでコメントしようとしたができなかったので。 if-else と if + return は変わらない エントリのソースを試していて偶然気が付いた。{} をつければ変わらない…

埋め込み文字列+遅延評価

元ネタ Re: Just for fun Groovy script for Google Picasa Venkat Subramaniam 氏の『Programming Groovy』に載っている Tips らしい*1。 Groovy で pass-by-name を検索して Hit した*2。 いつか使おうと思っていたが面白い使用例を思いつきそうにないので…

foldr

.hs

『Real World Haskell』 4章の内容から。 左畳み込みと右畳み込みの違い foldl (+) 0 (1:2:3:[]) == foldl (+) (0 + 1) (2:3:[]) == foldl (+) ((0 + 1) + 2) (3:[]) == foldl (+) (((0 + 1) + 2) + 3) [] == (((0 + 1) + 2) + 3) foldr (+) 0 (1:2:3:[]) ==…

Scala exercises for beginners

id:akihiro4chawon 氏の scala を左傾化させる話 - akihiro4chawonの日記 が元ネタ Pattern match*1 で解いてみた。 Pattern match は好きなのだが RWH によると明示的な再帰より fold を使う方がわかりやすいと書いてあった。この辺りは経験を積んでから判…

Koan

Ryo Tomidokoro 氏の エントリ を読んで知った。 調べてみたところ Ruby 発祥の禅問答集のようなもので様々な言語で存在するみたいだ*1。 禅の公案(Koan)がプログラミング学習でプチブーム:Rails Hub情報局:エンジニアライフ Groovy は cjudd 氏の groov…

A micro-manual for LISP Implemented in Groovy

元ネタは Nurullah Akkaya 氏の A micro-manual for LISP Implemented in C その元ネタは Lisp の始祖である John McCarthy 氏の A micro-manual for LISP - not the whole truth*1 LISP による実装は 50 行ぐらい、C による実装は 380行ぐらいある。 この差…

ファイルの改行コードを変換する方法

元ネタ:1行で指定ディレクトリ配下のファイルの改行コードを変換する方法 - Togetter がんばってみたが AntBuilder に及ばなかった。 // 個人的な設定なので注意 new File('.').eachFileRecurse(groovy.io.FileType.FILES) { it.write(it.text.normalize()…

文字列で+を表示する

Groovyのtrampolineを使ってピラミッドのお題を解いてみた - No Programming, No Life が楽しそうなので私も エロと風俗情報満載 どう抜く? から引用する。 pooq 氏からの お題 与えられた文字列で+のかたちを表示するプログラムをかいてください。 サンプ…

Control.Arrow

.hs

『プログラミングHaskell』の次に『Real World Haskell』を読みはじめた。 でも先に Control.Arrow とか Control.Applicative が何であるかを知りたい。 ありがたいことに日本語のブログが結構あるので読ませてもらって少し分かってきた。 99 questions/Solu…

Groovy の型変換

型変換についてのメモ。 プログラムの挙動がおかしいと思ったときに読み返すためのもの。 Scala の implicit conversions implicit conversions が試されるのは 要求された型への変換 変数宣言の型への変換 メソッド呼び出しの引数の型への変換 レシーバの変…

Groovy MOP

Groovy にはメタプログラミングための API が用意されている。*1 関数の自動メモ化 の中で当てはめると Spring AOP のようなことを言語内で行える。 class MemoizeInterceptor implements Interceptor { def cache = [:] def hasResult @Override Object bef…

『自然数対の整列列挙』に挑戦

お題: 2011-04-30 http://d.hatena.ne.jp/route150/20110428/1303994639 似ているのだが f が不定である。id:route150 氏から 遅延評価(主にfoldrとmerge)は相性がいい と教えてもらったのに自力で解いたらこうなった。 import Control.Monad import Data.L…