ナベアツ算の下書き。

doukaku.orgの書きかけ。
1つは投げたんですが、sumimさんの「風変わりな実装」(世界のナベアツに Squeak Smalltalk で挑戦する(改訂) - Smalltalkのtは小文字です)に触発されて大改訂を初めてしまいました。

Integer.metaClass.の倍数 = {->(delegate..100).step(delegate)}
ArrayList.metaClass.と = {list->new ArrayList(new TreeSet(delegate + list))}
Integer.metaClass.のつく数字 = {->
    def target = delegate 
    (1..100).findAll{"$it" =~ "$target"}
}
ArrayList.metaClass.のとき = {cls->
    delegate.each{it.metaClass.toString = cls}
}

def アホになります = {->"${delegate}っ"}
def ナルシストになります = {->"${delegate}…oh!"}
def 人を捜してる感じになります = {->"${delegate}〜〜?"}

3.の倍数().と(3.のつく数字()).のとき(アホになります)
5.の倍数().のとき(ナルシストになります)
8.の倍数().のとき(人を捜してる感じになります)

(1..100).each {println it.toString()}

「の倍数」「のつく数字 」はプロパティにしたいし、最後の

(1..100).each {println it.toString()}

もなんとかすれば、

100.まで {
    3.の倍数.と(3.のつく数字).のとき アホになります
    5.の倍数.のとき ナルシストになります
    8.の倍数.のとき 人を捜してる感じになります
}

てできるのになぁ。もうちょいです。

…なんで

Integer.metaClass.getの倍数 = {->…}

てやっても「の倍数」プロパティにならへんのやろ…?なんとかしたい!

追記:
思いついた!関数型風味で

100.まで (
    3.の倍数.と(3.のつく数字).のとき: アホになります,
    5.の倍数.のとき: ナルシストになります,
    8.の倍数.のとき: 人を捜してる感じになります
)

てできるかも!
「のとき」プロパティはbooleanを返すクロージャで、

Integer.metaClass.まで {map->
    (1..delegate).each{it->
        print it
        map.each{condition, action->
            if (condition) action()
        }
        println
    }
}

て回す。どっちがきれいかなぁ…