我輩はブロガーではない。ネタもまだない

SASとかDelphiあたりの人様の役に立たないネタを提供します

配列の括弧指定

今日ソースレビューをしていて気がつきました。

sasの配列は
配列名{i}
という形で表現しますが、この括弧が()でもでもいい、ということは知られていると思います。
[https://documentation.sas.com/?docsetId=lestmtsref&docsetTarget=p08do6szetrxe2n136ush727sbuo.htm&docsetVersion=9.4&locale=en:title=参照>SAS ステートメントリファレンス]


でも、{}とって組み合わせられるんですって、奥さん。




なのでこれは正常に処理されます。

data _null_;
  array arr1[5} 8;
  do i=1 to dim(arr1);
    arr1{i]=i;
    arr1[i}=i;
  end;
run;

レビュー中に、なんでこれでコンパイル通ってんだ!となりました。


ただ、()と{}[]は扱いが違うようで、()と他の組み合わせは構文エラーとなります。

  array arr1{5) 8;

なら[か}を指定しろ、と
f:id:japelin:20200129122530p:plain

  array arr1(5} 8;

なら)を指定しろ、と出ます。
f:id:japelin:20200129122550p:plain



いくつか組み合わせを試したんですが、配列宣言では、先頭の括弧が先に評価されるのに対し、
割当ステートメントでは後ろの括弧が先に評価されてました。面白い。

    arr1(i]=i;

だと[か{を指定しろ、と
f:id:japelin:20200129122749p:plain

    arr1{i)=i;

だと、(を指定しろ、と。
f:id:japelin:20200129122820p:plain


え?知ってた?