このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

groovyとラムダ式(6):補足と総括

http://groovy.codehaus.org/Closures の"Syntax for Defining a Closure"を見たら、クロージャの構文が{ <closureArguments> -> <statements> } となってます。今後は、仮引数と本体の区切りに矢印を使うようですね。

僕としては、矢印のほうが好み。キマイラ・サイトの記事「よく使う記法など」の「関数とラムダ記法」のところを見てもらうとわかるのだけど、<<仮引数リスト> |→ <定義の本体>> という構文をインフォーマルなラムダ記法に採用しようとしているので、これとほとんど同じ書き方になるもんね。(どうでもいいことだけど。)

んで、全体の印象としては、ラムダ式を実感するのにgroovyのクロージャはけっこうイイのでは、と思います。計算機構が違うので、完全に挙動が同じにはなりませんが、常識的な高階関数は素直に書けます。純関数型ではないので、かえって(普通の人には)書きやすいでしょう。例えば、i=nからmまでの関数値f(i)の総和Σf(i)は次のように書けます。


Sigma = {|n, m, f|
int total = 0
// for構文がまだ使えないので
// whileにする
int i = n
while(i <= m){
total += f(i)
i++
}
total
}

println Sigma(1, 10, {|x| x}) // 1 + 2 + ... + 10
println Sigma(1, 10, {|x| x * x }) // 1^2 + 2^2 + ... + 10^2

ラムダ計算の教科書は、昔だと、Hindley & Seldin の"Introduction to Combinators and λ-Calculus" 1986 が定番だったけど、今は入手できないみたい。日本語では、[1]や[2]にモダンな説明があります。

いずれの教科書も、覗き見で済ませるには本格的過ぎる。もう少しお気軽な資料はないものか?とgoogleを引いてみる -- googleトップに出る「ラムダ計算ABC」(http://members.at.infoseek.co.jp/nbz/ref/lambda.html)は短くてトッテモ面白いです。けど、お気軽/お手軽な解説とはチョット違うかな。

(groovyとラムダ式、オシマイ)