Pascal再入門

 最初に覚えた言語はBASIC。まがりなりにも業務で使えるプログラムを書いたのがPascal。サーバーの維持管理業務で使っていたのはJSP。必要に応じて使っていたのはVBA。つい最近使い始めて、そのまま放りっぱなしになっているのは、EmacsLisp。

 なんだかんだいって、BASIC以外はPascalでの知識をベースに誤魔化しながら使ってきた。EmacsLispでさえもそうで、(function x)をfunction(x)に読み替えて理解していた。型宣言のない変数は気持ちが悪い。

 だから、開発言語にもう一度手を出すのなら、Pascalに再入門するのが正しいと思う。EmacsLispは外せないのだが、Pascalの次をJavaにするのかC#にするのかは用途の問題。Window10をターゲットにアプリを書くつもりならC#が良さそうな気がする。

 Javaは汎用言語だが、意外に日常的な用途が見つからない。Lispは魅力的な言語だとは思うが、とてもニッチな領域になってしまう。Gaucheくらいは覚えたかったのだが、今のところEmacsLispでいい。

 いずれにせよ、Mp3tagもどきを作るのであれば、Pascalが一番楽そう。その辺から攻めてみるか。

 

 ところで、Pascalは既に古典的な言語になってしまっているようで、コンソール用の解説がなかなか見つからない。TurboPascalでもargvとargcが使えたはず。記述法を探してみたのだが、Cとか他の言語での用法は見つかるのだが、Pascalのそれは見当たらない。

 標準入力を変数として取り込むという意味では。

program args;
var
    argument:string;
begin
    readln(argument);
    writeln(argument);
end.

 じゃダメ。

 試行錯誤してみて、以下のような感じ?

program argcargv(argc, argv);
var
    count : integer;
begin
    for count:=1 to argc-1 do writeln(argv[count]);
end.

  これで、

>argcargv test1 test2 test3
argcargv test1 test2 test3
test1
test2
test3 

  となる。レファレンスとかで裏を取ったわけではないので、正しいのかどうか確証はない。

 苦労しそう、、、。

 fpcのリファレンスガイドで確認してみたのだが、argc, argvは予約語一覧にも記載がなかった。

 ようやく見つけたのが、https://docs.oracle.com/cd/E19957-01/802-5762/802-5762.pdf

 Oracle Help CenterのPascal Language Reference。OracleにはVirtualBoxでもお世話になっている。企業に高価なDBを売りつけるだけでなく、きっちりその立場としての社会貢献をしている立派な企業であると見直した。

 argv. argcはTurboPascalを使っていた時、参考書として買った入門書に書かれていたのを覚えていたもの。当時のTurboPascalのマニュアルは英文のものしかなかったので、書店で適当に買ったもの。まだDOSの時代だったので、プログラムに引数を渡してやる必要があった。その後、対話メニューを書くようになって、コマンドラインから引数を使うようなプログラムは書かなくなった。

 しかし、エチュードとして書くなら、なるべくシンプルなプログラムで済ませたい。

 Oracleのレファレンスによれば、argc, argvは非標準の識別子。組み込み関数としての位置づけにあるらしい。まぁ、fpcとtpcで使えるのなら、非標準でもなんでもいい。

 とりあえず、Pascalの再学習を進めていく事にする。