INTERCALに機能を追加してコマンドライン引数を読めるようにしたーい!

書いた日 2025年1月12日

そう、こうすれば標準入出力以外の手段で、なんやかんやができる…と思います。 そうすれば、コードゴルフとかで、あるいは使いやすいプログラムの作りかたとして役に立つかも。

INTERCALといえば

C-INTERCALCLC-INTERCALの2つのメジャーな実装があると思います1

逆に、他にもあるとか、そんなばかなと思います2

INTERCALにそんな機能とかあるの?

ないよ今のところ。入出力関連について、あるところと言えば、こんな感じだと思います。

C-INTERCALにある入出力関連機能

最新版は2024年10月に出た0.33なんだけれど、 ウェブでそのまま載ってるのは0.27という、2007年の版のマニュアルになってて、 最新版のマニュアルもそこから全く変わってなくてびっくりしました。 最新版でなんか増えなかったかを調べてみました。 機能としてはマジで増えてなくて、バグ修正してたのがこれまでの内容だったんです。まあこの話はさておき、入出力関連で何やるんだろうね?

C-INTERCALというコンパイラは、C-INTERCALという方言の他にCLC-INTERCALとかPIC-INTERCALとかをなんやかんやするんだけど、 C-INTERCALという方言に限って話すとなれば、

の二つがあります。PIC-INTERCALとかだとピンへの入出力だったり。なんでって?組み込みプログラミング。

CLC-INTERCALにある入出力関連機能

最新版は2024年4月の1.00で、入出力としてはこんな機能。しかもC-INTERCALより機能たくさんあるよ。

機能を追加するとなれば?

C-INTERCALだったら

じつはC-INTERCALコンパイラは、C言語の関数とリンクできたり、 Befunge-98のプログラムとリンクできたりするので、この機能を使えば コマンドライン引数の内容を配列に書き込むようなライブラリが実現できるんですけど、 まあ詳しくは元ネタのマニュアルをごらんください。

CLC-INTERCALだったら

システムコール#10を追加して「.Xに引数の数、:Xに最大文字数、;XSUB#1から;XSUB,Xまでの各配列に各引数の内容をバイナリI/Oで表したものをそれぞれ格納する」っていう機能を追加してこれをプルリクしてもらおうかなと思います。暇だったら。

まとめ:レッツ・INTERCALプログラミング

いかがでしたか?

今日は、INTERCALに機能を拡張する場合の概要をお話ししました。

コード例とかあったら前向きに検討しますのでお楽しみに。


  1. 昔のCLC-INTERCAL 

  2. 何者かが、J-INTERCALとかを実装してたと思いますが、C-INTERCALにも届かない状況ですしINTERCAL-72のをそのまま実装した程度ですんで、取り上げません。 

  3. 英語以外にイケる言語あるよ(笑) 

  4. C-INTERCALより出力のしかたちょっと違うよ 

  5. このハンドラで標準エラー出力とかに出せたりネットワークプログラミングできたりします。