Re: PL/1, Origin of struct
大谷です。
toda@lbm.go.jp writes:
> In article <u7k4rgpec.fsf@anet.ne.jp> tksotn@anet.ne.jp writes:
> 「C言語への影響」になってくると、「どっちの影響が強い」のか
> 明確で無くなってきますね。ちょっと歯切れの悪い書き方になってしまいました。
ちょっとそれますが、
Cと深い関係を持っているunixのもうひとつの主要言語である Bourne shell には
alogl68の影響が大きく見られます。if/then/elif/else/fi、case/in/esac は同一。
for/while/do/od はodがdoneにかわっただけ。(odコマンドが先にあったからか?)
キーワード名の一致だけでなく、Bourne shell で、
while read a,b
test a -gt 0
do foo bar $a $b
done < file
のように条件部分に複数の文/式をかけることも同じですし、
すべてのコマンド実行が別の面から見ると条件式であるのも式言語を思わせます。
program |
case "$opt" in
-format) pr ;;
*) cat ;;
esac | lpr
のように構造文がパイプの中で使えるのもこれらがalgol68では値を持つことと
似ているような気がします。
> http://www.lbm.go.jp/toda/comp/struct.html
> を改訂してみました。
そこから引用:
>COBOLの名前空間は全体で1つであり、メンバー変数の名前を個々の構造体ごとに
>変えねばならない。そして、構造体変数の代入は常に並び順照合である。
これは間違ってます。
>PL/Iでは、異なる構造体に同一名のメンバーが属することを許容し
>(むしろ同一構造の構造体には同一メンバ名を用いることを推奨し)、
>代入に際して名前で照合する「BY NAME」指定を導入した。
と書いてあるPL/Iと同じです。同じ名前の要素の参照は、「要素名 OF 親の名」
で参照します。要素名がプログラム中でユニークなら「OF 親の名」は省略可。
名前で照合して代入や計算するのは CORRESPONDING 。
>ちなみに、COBOLで構造の異なる構造体変数へ代入する場合は、一旦バイト列に
>分解して頭から変数に切り直すという恐ろしい仕様(ファイル入出力のバッファ
>という発想からすれば自然か?)になっている。
これはちょっと意味がわかりません。構造の異なる構造体変数への代入は
ごく普通に親の名前を使って MOVE すればできるのでは?
COBOL,PL/Iのリファレンスは、http://www.jbooksrv.yamato.jp.ibm.com/ がいいです。
--
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