aggregate¶そろそろ疲れが出てきました。簡単なので済ませます。経緯¶SPARKという、Adaのサブセットに静的な検証機能を追加したAdaCore社の製品がありまして。そのSPARKでは様々な条件を式として書く必要があります。record;というようなrecordがあるとして、この型のオブジェクトの一部分だけを変更したいとします。Set_Left;このサブプログラムに検証のための事後条件を書き足します。保存していいかわからなくなるからです。付けられているかもしれませんのでなるべく保存しないような仕様になっています。2012にも採用されています。SPARKですと静的に検証されますが、Adaとしての動作は実行時の検証となります。それで、まあ、やってられませんね。ありえませんけれども、もし要素数が増えたら漏れが出そうです。なると必要になるのが、関数型言語にある構造体の一部を更新する式です。Camlですと、こう書けます。new_left}というわけでSPARKにもこの機能が独自に追加されました。2020にも提案されましたが却下されました。これは見ての通り属性の構文を流用したものです。馴染まないとかなんとか。aggregateという機能がありましたので、それに倣った形です。固定小数点数の刻み幅に使われていた予約語です。Adaではたまにこういう予約語の再利用があります。