引数を書き換える方法がいくつかあります。キャストやメモリアクセス等で所謂危険な操作を行うこともできますが、認められた安全なやり方もあります。次のパッケージを実装してください。関数は呼び出しごとに異なる値を返す必要があります。真面目に乱数を実装する必要はありません。等と標準ライブラリを含めた他のパッケージ、グローバル変数は使用禁止とします。型は使えるものとします。型は使えるものとします」って時点で答えですけどね!実装例1¶メモリリーク上等。使ってRAIIで解放できます。実装例2¶Coextension。bodyは上に同じ上の改良版です。型のdiscriminantに割り当ての式(new)を書いた場合割り当ては一体化されます。RAIIを使わなくてもメモリリークしません。......規格上では。残念ながらGNATにはこの機能は実装されていません。実装例3¶GNATでも通るやり方です。型の値を獲得しておくことで可視性の上では変更が許されていない箇所からでも書き換えができます。経由して可視性の上で定数として見えている箇所からも書き換えられるというだけで、実体を定数として宣言しようとするとエラーになります。コンパイラによっては現時点でも変化する定数を作れます。パラメータに渡された変数を書き換えています。検証のためには本当はどうアクセスしているかを表明する必要があります。アスペクトを使用します。