Fortran を勉強する
プログラミング言語の歴史を理解するために Fortran を勉強する。歴史を理解するためのなので、最古から最新まで理解することを目指す。実用的な目的のために Fortran のプログラムを書く予定はない。
FORTRAN 66 は USA Standard FORTRAN, ANSI X3.9-1966 のことである。
以下 FORTRAN 66 についてである。
program unit は A から Z までのラテン文字と0から9までのアラビア数字と blank
, equals =
, plus +
, minus -
, asterisk *
, slash /
, left parenthesis (
, right parenthesis )
, comma ,
, decimal point .
, currency symbol $
という文字を使って書かれる。
line は 72 字の string である。
行 (line) の中の文字の位置は列 (column) という。列は左から右へ第1列から第72列まで数えられる。
コメント行: 第1列の文字が C
だったら、その行はコメント行である。コメント行はイニシャル行か他のコメント行かエンド行に続かなければいけない。
エンド行: 第1列から第6列までの文字が空白であり、文字 E
, N
, D
がそれぞれ一回ずつ、その順で現れる文字列に空白を散りばめた第7列から第72列からなる。
イニシャル行: コメント行でもエンド行でもなく、第6列に文字として0か空白を持つ行である。第1列から第5列まではstatement label を含むか、空白をそれぞれ含む。
継続行: 継続行 (continuation line) は第6列に0または空白以外の文字を持ち、第1列の文字がCでない行である。継続行はイニシャル行か他の継続行の後にだけ続く。
言明 (statement) は一つのイニシャル行かそれに続く19個までの継続行からなる。言明は第7列から第72列までに書かれる。
言明ラベル (statement label) は5文字までの数字からなる。値は0よりも大きくなければならない。リーディングゼロは言明ラベルを区別するのに役割を果たさない。言明の第1列から第5列
複素定数 (complex constant) は自由選択的に符号付きの実定数の順序対であり、コンマで区切られ、括弧で囲われる。そのデータはその対で表される複素数への近似である。
論理定数 (logical constant) は真 (true) と偽 (false) で .TRUE.
と .FALSE.
とそれぞれ書かれる。
ホレリス定数 (Hollerith constant) は文字 H に続く0より大きい値を取る整数定数である。
算術演算子
-
+
加法 -
-
減法 -
*
乗法 -
/
除法 -
**
指数
関係演算子
-
.LT.
less than -
.LE.
less than or equal to -
.EQ.
equal to -
.NE.
not equal to -
.GT.
greater than -
.GE.
greater than or equal to
論理演算子
-
.OR.
論理選言 -
.AND.
論理連言 -
.NOT.
論理否定
FOTRRAN 77 で CHARACTER
という文字データ型が導入された。
Wikipedia の Hollerith 定数 のページにある FORTRAN 66 の hello world プログラムの例
PROGRAM HELLO1
C
INTEGER IHWSTR(3)
DATA IHWSTR/4HHELL,4HO WO,3HRLD/
C
WRITE (6,100) IHWSTR
STOP
100 FORMAT (3A4)
END
GNU Fortran でコンパイル&実行してみる。
$ gfortran main.f
main.f:4:35:
4 | DATA IHWSTR/4HHELL,4HO WO,3HRLD/
| 1
Warning: Legacy Extension: Hollerith constant at (1)
main.f:4:20:
4 | DATA IHWSTR/4HHELL,4HO WO,3HRLD/
| 1
Warning: Extension: Conversion from HOLLERITH to INTEGER(4) at (1)
main.f:4:27:
4 | DATA IHWSTR/4HHELL,4HO WO,3HRLD/
| 1
Warning: Extension: Conversion from HOLLERITH to INTEGER(4) at (1)
main.f:4:34:
4 | DATA IHWSTR/4HHELL,4HO WO,3HRLD/
| 1
Warning: Extension: Conversion from HOLLERITH to INTEGER(4) at (1)
$ ./a.out
HELLO WORLD
実行できた。
Fortran 公式サイト? より、現代の Fortran の hello world:
program hello
! This is a comment line; it is ignored by the compiler
print *, 'Hello, World!'
end program hello
$ gfortran hello.f90 -o hello
$ ./hello
Hello, World!
FORTRAN 77 までの固定形式のソースファイルの拡張子は f
で Fortran 90 以降の自由形式のソースファイルの拡張子は f90
である。
変数は宣言する必要がある。
<variable_type> :: <variable_name>
で宣言する。
そのままだと変数名から型が決定される。それをしない場合は、言明 implicit none
をプログラムの初めに書く。
program variables
implicit none
integer :: amount
real :: pi
complex :: frequency
character :: initial
logical :: isOkay
end program variables