Smalltalker の FizzBuzz

しつこく Fizz-Buzz。Smalltalker が FizzBuzz 問題をどう解くか、Smalltalker の 頭の中を解りやすく大公開というエントリーに酷く心地よさを感じたので。

「Lisp脳」の謎に迫る - Smalltalkerの発想


あたしも一発目に頭に浮かんだのはこんなんでした。(ちと・・いやかなり中途半端な Smalltalk度 ですが(^^;)

(1 to: 100) collect: [:each | each asFizzBuzz ]
Integer >> #asFizzBuzz
    (self \\ (3 * 5)) isZero ifTrue: [^'FizzBuzz'].
    (self \\ 3) isZero ifTrue: [^'Fizz'].
    (self \\ 5) isZero ifTrue: [^'Buzz'].
    ^ self


コレクションクロージャメソッド なのは あんまり珍しくはなくなっちゃいましたが、Smalltalker は Integer に #asFizzBuzz を追加したくなっちゃうのがミソです。

Smalltalk 上での プログラミングは、 環境そのものを自分好みに変えていくことです。だからInteger だろうが String だろうがお構いなしに変えちゃいます。それが心地よくもあり、(普段暮らしている OS 上でなんかやろうとすると)不便でもあるところです。