OGNL で FizzBuzz

今度は Seasar2 の dicon ファイルでも利用されている式言語, OGNL でやってみたよ.

#fizzbuzz = :[
  @System@out.println(
    #this % 15 == 0 ? 'FizzBuzz' : #this % 3 == 0 ? 'Fizz' : #this % 5 == 0 ? 'Buzz' : #this), 
  #this < 100 ? #fizzbuzz(#this + 1) : 0], 
#fizzbuzz(1)

Pseudo-Lambda Expressions を使ってます.
あるいは,最初に 1〜100 のリストを作って,その要素を置き換えて最後に表示するやり方とか.

#mkList = :[#this.add(#this.size + 1), #this.size < 100 ? #mkList(#this) : #this], 
#mkList({}).
  {#this % 15 == 0 ? 'FizzBuzz' : #this % 3 == 0 ? 'Fizz' : #this % 5 == 0 ? 'Buzz' : #this}.
  {#var = #this, @System@out.println(#var)}

最後のところの #var = #this がなんか不格好.
でもでも,こうしないと @System@out.println() の中では #thisnull になってるんだよね.
@System@ がコンテキストになってる?
でもでも,Pseudo-Lambda Expressions の中ではそんなことにならないんだけど.
OGNL も奥が深いなぁ.
っていうか,まだ FizzBuzz やってても恥ずかしくないよね?
ゴルフじゃなくても恥ずかしくないよね?


P.S.
Whitespace でやってる猛者がいる〜 (笑)
http://d.hatena.ne.jp/etsav/20070518/1179507015
これはすごいなぁ.


P.P.S
recomplile.net の takai さんが J でやってくれることになってるんだけどなぁ.
まだかなまだかなぁ〜


P.P.P.S
お.