Re: PL/1, Origin of struct
fj.comp.lang.cobolへ振ります。
In article <uu17rw9g8.fsf@anet.ne.jp> tksotn@anet.ne.jp writes:
>> http://www.lbm.go.jp/toda/comp/struct.html
>> を改訂してみました。
>そこから引用:
>>COBOLの名前空間は全体で1つであり、メンバー変数の名前を個々の構造体ごとに
>>変えねばならない。そして、構造体変数の代入は常に並び順照合である。
>これは間違ってます。
情報ありがとうございます。
ただ、私の知り得る情報を総合した限りでは、
「間違っている」のではなく「情報が古い」のではないかと思うのですが、
如何でしょうか?
実は私のCOBOLに関する知識は、(恐ろしいことに)1982年で停まっておりまして、
従って、「第3次規格」(ANSI 1985, ISO 1985, JIS 1988)以前なのです。
使っていた教科書にも、
「構造化プログラミングを導入する改訂の規格化が進められている」と
コラムの中で触れられていて、
手続き部の書き方に関する簡単な例が挙げられているだけで、
詳細な内容はありません。
>>PL/Iでは、異なる構造体に同一名のメンバーが属することを許容し
>>(むしろ同一構造の構造体には同一メンバ名を用いることを推奨し)、
>>代入に際して名前で照合する「BY NAME」指定を導入した。
>と書いてあるPL/Iと同じです。同じ名前の要素の参照は、「要素名 OF 親の名」
>で参照します。要素名がプログラム中でユニークなら「OF 親の名」は省略可。
>名前で照合して代入や計算するのは CORRESPONDING 。
というのも、発想的にはalgol系の世界から持ってきた
(直接にはPL/Iから逆輸入した?)と考えられる内容なので、
第3次規格の際に導入されたのではないかとニラんでいるのですが、
裏付ける情報が全く得られていません。
どこかに、第3次規格の際の改定内容の詳細を
簡潔にまとめたテキストって無いでしょうか?
>>ちなみに、COBOLで構造の異なる構造体変数へ代入する場合は、一旦バイト列に
>>分解して頭から変数に切り直すという恐ろしい仕様(ファイル入出力のバッファ
>>という発想からすれば自然か?)になっている。
>これはちょっと意味がわかりません。構造の異なる構造体変数への代入は
>ごく普通に親の名前を使って MOVE すればできるのでは?
「分解」というより「展開」と表現した方が良かったかな?
例えば、
01 ORGNSTRC.
10 ORGNTEXT1 PIC X(4).
10 ORGNTEXT2 PIC X(6).
と
01 DESTSTRC.
10 DESTTEXT1 PIC X(6).
10 DESTTEXT2 PIC X(4).
があって、
ORGNTEXT1の内容が「1234」、ORGNTEXT2の内容が「ABCDEF」だったときに
MOVE ORGNSTRC TO DESTSTRC.
とすると、
DESTTEXT1の内容は「1234AB」、DESTTEXT2の内容は「CDEF」になる
(つまり、メンバ変数間の区切りが無視される)ということです。
戸田 孝@滋賀県立琵琶湖博物館
toda@lbm.go.jp
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