2のx乗を求めるスクリプト
クロージャの練習で作ったスクリプトをせっかくなんで公開。
言語はrubyとgroovy。
題材はNo Programming, No Lifeの表の数値。
まずはruby
ソース
def count_up(interval) num = 1 1.upto(80) do |i| num *= 2 yield(i, num) if i % interval == 0 end end count_up(10) do |i, num| print "2の#{i}乗=#{num.to_s()}\n" end
yieldで処理をブロックに渡します。
出力結果
>ruby num.rb
2の10乗=1024
2の20乗=1048576
2の30乗=1073741824
2の40乗=1099511627776
2の50乗=1125899906842624
2の60乗=1152921504606846976
2の70乗=1180591620717411303424
2の80乗=1208925819614629174706176
続いてgroovy
ソース
def countUp(def interval, Closure clos) { def num = 1G // BigInteger型 for(i in 1..80){ num *= 2 if(i % interval == 0) { clos.call(i, num) } } } countUp(10) { i, num -> println "2の${i}乗=${num.toString()}" }
こちらはClosureクラスのcallメソッドを実行してクロージャを呼び出す。
(2008-12-13追記: id:nobusueさんのご指摘を受け、「def num = new BigInteger("1")」となっていた部分を「def num = 1G」へと変更しました)
出力結果
>groovy num.groovy
2の10乗=1024
2の20乗=1048576
2の30乗=1073741824
2の40乗=1099511627776
2の50乗=1125899906842624
2の60乗=1152921504606846976
2の70乗=1180591620717411303424
2の80乗=1208925819614629174706176
結果はrubyとgroovyどちらも同様。