今さらfizzbuzz(剰余なし)〜おまけJavaFX版〜
- 『どうしてプログラマに・・・プログラムが書けないのか?』
3連休。
暇なので、他の切り口での剰余演算なしfizzbuzz解法を考えてみる。
fb n | elem n [15,30..100] = "FizzBuzz" | elem n [3,6..100] = "Fizz" | elem n [5,10..100] = "Buzz" | otherwise = show n main = mapM_ (putStrLn.fb) [1..100]
冴えないお。効率超悪いし、ナベアツほど面白みもない。
長い余談…JavaFXの場合
Haskellのような等差数列の表現(ex> [3,6..100])って、
確かJavaFX Scriptでも出来るってことをうっすらと覚えてたので、
暇ついでにNetBeansでJavaFXをいじってみる。
ところが…
var fizz = [3,6..100];
上はコンパイルエラーになる。よくよく調べてみると、言語仕様がかなり変更されてて、
var fizz = [3..100 step 3];
にしないとダメらしい。
なんでこんなこと変えるの?Haskell嫌い?
まぁ、stepに変数を指定したくなったのだろうけど。
- 旧『JavaFX Script プログラミング言語』
- 新『The JavaFX Script Programming Language Reference (Draft)』
JavaFXのウリであるGUIクラスもずいぶん変わっちゃってるみたい。
いろんなとこで紹介されてる"HelloWorld"でさえエラーになる。
- 『JavaFX 1.0 をいち早く体験してみる』
なんだかなぁ。気を取り直してfizzbuzzってみる。
import java.lang.System; import javafx.lang.Sequences; var fizz = [3..100 step 3]; var buzz = [5..100 step 5]; var fizzbuzz = [15..100 step 15]; for (i in [1..100]) { var str = i.toString(); str = if (Sequences.indexOf(fizz,i) != -1) then "Fizz" else str; str = if (Sequences.indexOf(buzz,i) != -1) then "Buzz" else str; str = if (Sequences.indexOf(fizzbuzz,i) != -1) then "FizzBuzz" else str; System.out.println(str); }
んー。言語変えてみてもダメな設計がよくなるわけでもなし。
それにしてもほんとJavaFXはどーなんだろ。
別に三項演算子が好きってわけでもないけど、
上のやつも「str = expr ? "Fizz" : str」って書くとエラー。
実はJavaFXでは、if-then-elseが三項演算子で、さらにif-else文の分岐式とは別モノと云う…。
しばらくJavaFXには近寄らないことにする。