Re: PL/1, Origin of struct
大谷と申します。
toda@lbm.go.jp writes:
> In article <binuft$49p$1@bluegill.lbm.go.jp> toda@lbm.go.jp writes:
>>> そもそも言語メカニズムというならCの祖先BCPLや親戚BLISSを調べる
>>>必要はあるんじゃないでしょうか。
>>ですよね。あと、algol 68も見ておきたいんだけど、
>>教科書探しから始めねばならない状況です。
> ということで、とりあえずWebで少しは判らないかと
> いろいろ探してたら、
algol68 struct union esac でググって、
http://www.cs.virginia.edu/~evans/cs655-S00/Spring-1999/Slides/05a68_pasc.pdf
や http://page.inf.fu-berlin.de/~wolff/Algol68-OCCL.html
というのを見つけました。
20年ほど前に解説書を1冊読んだのですが、これを見て少し思い出してきました。
戸田さんのサンプルをalgol68で書くと、
STRUCT (
INT maindata,
STRUCT (
INT subdata,
[0:3] CHAR subtext
) subsets,
[0:79] CHAR maintext
) datasets;
でしょうか。一番 C と似てますね。(algol68 のプログラムの記述には2種類の文字が
必要なのでとりあえずキーワードや型名を大文字にしました)
union もありますが、これは C とずいぶん違う。C ではどの型のデータが入っている
かはプログラマが管理しますが、algol68 では処理系が管理します。
宣言:
UNION (INT,REAL) foo;
代入:
foo := 1.5;
foo := 123;
参照:
CASE foo IN
(INT i): print(("integer=",i)),
(REAL f): print(("real=",f))
ESAC
代入した型と違う型で参照しようにも方法が無い。i の有効範囲は , までなので
(REAL f)の後の式では使えません。f も逆に同じ。
print手続きの引数も任意の型のunionです。上記例では、STRUCT(STRING,INT)型や
STRUCT(STRING,REAL)型の表記です。
ちなみに ; は区切りでも終端でもなく演算子です。C の , 演算子と同意。
処理系をさわったことが無いだけに憧れの言語ですね。
ふた昔前の記憶で書いているので間違ってたらごめんなさい。
--
oo
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735