APLでFizzBuzzを書いてみた

APL(A Programming Language)っていう名前はあんまり聞きなれないかもしれないけど、

APL(エーピーエル)は、コンピュータのプログラミング言語の一種で、1957年のケネス・アイバーソンによる創案に基づいた独特の表記法を用いた、対話型インタープリター言語である。

http://ja.wikipedia.org/wiki/APL

モルガンスタンレーやソロモンブラザーズなどの投資銀行がAPLを駆使し、巨額の利益を得ていた(もしくは巨額の損失を生み出していた)というお話。

http://slashdot.jp/developers/article.pl?sid=09/06/08/0439231

とあるようにそれほどマイナーではないのかもしれない。

APLの処理系は商用のものが多いようだけど、NARS2000という名のオープンソースの処理系を使ってみた。
NARS2000 Welcome Page

インデックスオリジンが1に設定されている時(何もしなければ通常1)

(2⊥0=3 5∘.|L)⊃¨(⊂1↓,⍬'Fizz'∘.,⍬'Buzz'),¨L←⍳100

と書くと

 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz 16 17 Fizz 19 Buzz Fizz 22 23
       Fizz Buzz 26 Fizz 28 29 FizzBuzz 31 32 Fizz 34 Buzz Fizz 37 38 Fizz Buzz 41 Fizz 
      43 44 FizzBuzz 46 47 Fizz 49 Buzz Fizz 52 53 Fizz Buzz 56 Fizz 58 59 FizzBuzz 61 6
      2 Fizz 64 Buzz Fizz 67 68 Fizz Buzz 71 Fizz 73 74 FizzBuzz 76 77 Fizz 79 Buzz Fizz
       82 83 Fizz Buzz 86 Fizz 88 89 FizzBuzz 91 92 Fizz 94 Buzz Fizz 97 98 Fizz Buzz 

という結果が返ってくる。出力が途中で改行されてしまっているけど、本来は一行。

anarchy golf - FizzBuzzだと、数字(若しくは「FizzBuzz」など)一つ出力する毎に改行してるけど、APLではまだどうやるか調べが付いてない。
ちなみに上のプログラムは46文字。要素ごと改行するのに何字必要かはわからないけど、1文字1バイトのAPL用のエンコーディングなら10位以内には入りそう。
もしこのままでいいのならJより短くなることになる。Golfscriptより短く出来る気はしないけど……。

APLにはその後継としてJ言語というのがあって、J言語でFizzBuzzをしている人もいた。
2009-03-13 - niming538の日記

解説とかは後日。

追記[2013-07-24]
コード中に実体参照で書かれていたものを文字に直した。