YabasicはBASICじゃねえ

Yabasicという処理系があります。
http://www.yabasic.de/
これが、BASICとして如何に酷いかをつらつら書きたいと思います。
NEXT J,Iができない。

FOR I=1TO 8:FOR J=I+1TO 9:...:NEXT J,I 'ふつーのBASIC
FOR I=1TO 8:FOR J=I+1TO 9:...:NEXT:NEXT 'Yabasic

whileに括弧を要求する

WHILE X:...:WEND 'ふつーのBASIC
WHILE(X):...:WEND 'Yabasic

ラベルの書き方が長ったらしい

*L:goto*L 'ふつーのBASIC
label L:goto L 'Yabasic

STRING$が無い

?STRING$(N,")") 'ふつーのBASIC
FOR I=1TO N:?")":NEXT 'Yabasic

あと、EOFで標準入力を指定できないため、どうも解けない問題があるんじゃないかとか、そんな。唐突に問題ってなんだよ。具体的にはechoの書き方がわからんです。というわけで是非こんなYabasicなんか捨てて、F-BASIC for WindowsをWINE併用で採用してください。あー、でもF-BASICとかBASIC/98とか、BASICっぽいBASIC処理系のWindows版って揃って独自コンソール開いて標準入出力が使えなかった気も……。GW-BASICもその同類っぽい。FreeBASICなら……あー、でもMS系っぽい構文だなぁ。あとBASICならEOFじゃなくてLINE INPUT WAITって解法もあるんじゃないかとも思ったんですがこんなものサポートしてるのはN88BASICしかねえ。とか思ったらBe88-BASICとかいうのがサポートしてやがりました。まあこれも標準入力取れない組っぽいんですが、BeOSなのが
そんなわけでhttp://www.thefreecountry.com/compilers/basic.shtmlあたりを眺めていたわけですが、なんですか、ラベルは*Lではなくてlabel Lのほうが一般的ですか!?

そんなわけでAvg.がHaskellより高いのに非常に勿体ないのです。

Pascal Golf

  • programヘッダーは省略できる
  • IntegerではなくWord型を使う
  • WriteLnではなく文字列に#10を挟んだ方が短くなる場合も
  • (GNU Pascal限定) Copy(a,x,y-x+1)ではなくa[x..y]と書く

とても哀しいことにGNU Pascalの組込み関数はDelphiほどリッチでは無い。具体的にはStringOfCharが無い。いや、あるように見えるんですけど使えるようにするにはDelphi互換オプションが必要っぽい。

Ada Golf

  • Ada.Text_IOではなく単なるText_IOを使う
  • Integer'Image(X)ではなくAda.Integer_Text_IO.Put(X,1);を使う
  • (GCC限定) でもX'Imgで済む時はそっちを使う
  • <> goto L;は他の長ったらしい制御文と比べ相対的に短い
  • 頼み込んで-gnat05付けてもらったのでGet_Line(S,N);ではなくS:String:=Get_Line;を使う