ハーマン・ホレリスにちなんで名付けられたホレリス定数は、初期のFORTRANプログラムで文字データの操作を可能にするために使用されていました。
初期の FORTRAN にはCHARACTER データ型はなく、数値型のみがありました。文字操作を実行するには、ホレリス定数を使用して文字を数値変数に配置する必要がありました。たとえば、定数は3HABC3 文字の文字列 "ABC" を指定し、文字列の長さを表す最初の整数と3指定されたホレリス文字で識別されH、その後に文字列データが続きますABC。これらの定数は型なしであるため、型変換の問題はありませんでした。定数がデータ項目に保持可能な文字数よりも少ない文字数を指定した場合、文字は左揃えで空白で埋められて項目に格納されました。
力学
FORTRAN 66標準では、ホレリス構文は次の用途で許可されていました。
DATA文中の定数としてCALLサブルーチン文の定数実引数としてFORMAT文中の編集記述子として
ホレリス定数では移植性に問題がありました。まず、ワードサイズはコンピュータ システムによって異なるため、各データ項目に配置できる文字数も同様に異なります。実装は、ワードあたり 2 文字から 10 文字までさまざまです。次に、ワード内の個々の文字を移植可能な方法で操作することが困難でした。このため、非標準のベンダー固有の機能を使用して、大量のシフト コードとマスクコードが必要になりました。文字セットがマシンによって異なることも、問題を複雑にしていました。
移植性を最大限に高めるには、データ項目ごとに 1 文字のみを使用するべきだという意見を持つ著者もいました。しかし、当時のマシンのメモリ サイズが小さかったことを考えると、この手法は非常に無駄が多いと考えられていました。
技術の陳腐化
FORTRAN 77 の主な機能の 1 つは、CHARACTER文字列データ型でした。このデータ型の使用により、Fortran プログラムでの文字操作が大幅に簡素化され、ホレリス定数技法の使用はほとんど不要になりました。
ホレリス定数は FORTRAN 77 標準から削除されましたが、サポートを継続したい人のために付録にまだ記載されています。ホレリス編集記述子は Fortran 90 まで許可されていましたが、Fortran 95 標準からは削除されました。
例
以下は、ホレリス定数を使用した FORTRAN 66 hello worldプログラムです。実装では、単語ごとに少なくとも 4 文字がサポートされていることを前提としています。
プログラムHELLO1
C
INTEGER IHWSTR ( 3 ) DATA IHWSTR / 4 HHELL , 4 HO WO , 3 HRLD / C WRITE ( 6 , 100 ) IHWSTR STOP 100 FORMAT ( 3 A4 ) END
ステートメントの他にDATA、ホレリス定数もサブルーチン呼び出しの実引数として許可されていました。ただし、呼び出された側が渡された文字数を知る方法はありませんでした。プログラマーは情報を明示的に渡す必要がありました。1ワードに 4 文字が格納されるマシンでは、 Hello Worldプログラムは次のように記述できます
。
プログラムHELLO2
CALL WRTOUT (11HHELLO WORLD, 11)
STOP
END
C
サブルーチンWRTOUT (IARRAY、NCHRS)
C
INTEGER IARRAY(1) [注 1]
整数 NCHRS
C
整数 ICPW
データ ICPW/4/ [注 2]
整数I、NWRDS
C
NWRDS = (NCHRS + ICPW - 1) / ICPW
書き込み (6,100) (IARRAY(I), I=1,NWRDS)
RETURN
100 フォーマット (100A4) [注 3]
END
技術的にはホレリス定数ではありませんが、同じホレリス構文がステートメント内の編集記述子として許可されていました。Hello Worldプログラムは次のように記述することもできます。
FORMAT
プログラムHELLO3
書き込み( 6 , 100 )停止 100フォーマット( 11 HHELLO WORLD )終了
最も驚くべき機能の 1 つは、入力に使用された場合のホレリス編集記述子の動作です。次のプログラムは、実行時にHELLO WORLD入力ストリーム内の次の 11 文字に変更され、その入力が印刷されます。
プログラムWHAT1
読み取り( 5 , 100 )書き込み( 6 , 100 )停止 100フォーマット( 11 HHELLO WORLD )終了
注記
- ^ FORTRAN 66 には可変サイズの配列を示す方法がありませんでした。そのため、サイズが不明であることを示すために通常は「1」が使用されていました。
- ^ 1単語あたり4文字。
- ^ カウント 100 は、任意の適切な数の文字を書き込むことができる「十分に大きい」値です。また、ここでも単語あたり 4 文字がハードコードされていることに注意してください。
参考文献
- アメリカ規格FORTRAN。アメリカ規格協会、X3.9-1966。p.38。
4.2.6ホレリス型。ホレリス データは文字列です。この文字列はプロセッサで表現できる任意の文字で構成できます。空白文字はホレリス データ内で有効かつ重要な文字です。
