PascalのHello World
第23回は、Pascalを使ったHello Worldです。Pascalでは、リスト1のようにwritelnを使って記述します。文字列はシングルクォートで囲みます。writelnでは、文字列の後に改行コードが自動的に付加されます。
Pascalでは、プログラムのブロックをbegin~endで囲みます。これは、C言語での{ ~ ;}に相当します。プログラムの最後のendには、ピリオドを付けて終了します。
Pascalのコンパイラとして、本稿ではPascalのソースをC言語に変換するp2cというソフトを使い、変換後のC言語をgccでコンパイルするという方法をとっています。このp2cには、PascalからC言語への変換と、gccでのコンパイルを自動的に行うp2ccというPerlスクリプトが付属しており、実行例1のようにp2ccコマンドを実行すれば、一気にPascalのコンパイルが行えます。
writeを使う
writelnではなく、writeを使うと改行なしでの出力ができます。リスト2では、writeを使って改行なしで文字列を出力しています。その後、writelnを引数なしで実行し、改行のみを出力しているため、結局、前掲リスト1とまったく同じ出力が得られます。
なお、Pascalでは、C言語とは異なり、セミコロンは文と文の区切りに入れれば良いため、endの直前の文(リスト2ではwriteln)の後ろにはセミコロンは不要です。
文字列型変数に代入
少しプログラムらしく、文字列をいったん文字列型変数に代入してからwritelnで出力するようにしてみましょう(リスト3)。Pascalでは、変数はvarを使って宣言し、変数名の後ろにコロン(:)で区切って変数の型を記述します。string[11]は、長さ11の文字列型を意味します。また、Pascalでは代入の記号は「=」ではなく、「:=」になります。
文字列を連結してみる
さらに、文字列を分割して2つの変数に代入したあと、それらを連結してみましょう(リスト4)。Pascalでは、文字列に対して、単純に足し算を行うことにより、文字列の連結を行うことができます。
配列を使う
今度は、文字列ではなく、配列を使ってみましょう(リスト5)。Pascalでは、C言語とは違って、文字型の配列は文字列とは異なります。
ここでは、要素数11の文字型配列messageを宣言し、同時に各要素をHello Worldの文字で初期化しています。C言語の文字列とは違って、終端に0のヌル文字が付いていないことにも注目してください。終端の0がなくても、writelnを実行すると、文字型配列messageの型からその要素数が11であることが言語的に判断できるため、文字列は正しく出力されます。
forを使ったループ
さらにプログラムらしく、ループを使ってみましょう。まずはforを使ったループです(リスト6)。
ここでは、前項と同様に文字型配列を宣言し初期化したあと、その各要素の文字を1文字ずつ、forループで出力しています。forループ中では、改行が出力されないようにwriteを使い、forループを抜けたあとに、writelnで改行のみを出力しています。
なお、このforループの中には、文としてwriteという1つの文しかないため、forループ本体を囲むbegin~endは省略してもかまいません。ただし、省略する場合はwrite()の直後にセミコロンを付ける必要があります。
whileを使ったループ
前項のforループをwhileループに書き換え、さらに文字型配列の最後の要素に終端を表す0を付加し、この0を見てループの終了を判定するようにしたのがリスト7です。文字型配列の要素数は1つ増やして12で宣言します。
whileループでは、条件が真である限りループが実行されます。ここでは、配列の要素が0ではないことを条件にしていますが、判定に使っているC言語での「!=」に相当する演算子は、Pascalでは「<>」になります
repeat~untilを使ったループ
Pascalにはrepeat~untilというループもあります。これはC言語でのdo~whileに相当するループで、ループ条件の判定がループの最後に行われ、最低1回はループ内容が実行されます。
前項のwhileループを、repeat~untilに書き直したのがリスト8です。C言語のdo~whileとは真偽判定が逆で、untilのところに書かれた式の値が真になると、ループを終了します。
ここでは、配列の要素が0であることを終了条件としていますが、判定に使っているC言語での「==」に相当する演算子は、Pascalでは単に「=」になります。
なお、repeat~untilのループ内には複数の文が書けるので、ループ部分をbegin~endで囲む必要はありません。
さいごに
「Hello Worldコレクション」は、今回をもって終了です。もちろん、世の中にはもっと多数のプログラミング言語が存在し、連載で取り上げたプログラミング言語は、その中のごく一部に過ぎません。連載に登場していないプログラミング言語のHello Worldプログラムについては、みなさん、および今後の筆者自身の課題としたいと思います。