私は大学のコースでエイダを学ぼうとしていますが、その中のいくつかのアイデアに頭を悩ませることに多くの問題があります。
私の現在のつまずき:マトリックス(整数の2次元配列のみ)を受け取り、新しい、より小さなマトリックス(最初の行と最初の列を取り除く)を返す関数があるとしましょう。
マトリックスと関数を次のように宣言します。
type MATRIX is array(INTEGER range <>, INTEGER range <>) of INTEGER;
function RemoveFirstRowCol (InMatrix: in MATRIX) return MATRIX is
次に、返すマトリックスのサイズを決定します。
Result_matrix: MATRIX (InMatrix'First(1) .. InMatrix'Length(1) - 1, InMatrix'First(2) .. InMatrix'Length(2) - 1);
次に、計算を行い、Result_matrixを返します。
これが私の問題です。これを実行すると、この関数の結果を正確な適切なサイズで宣言されたMatrix以外のものに戻そうとすると、実行時に例外が発生することがわかりました。
私の質問は、私はこれを正しく行っているのかということです。サイズの観点から関数が何を返すかを事前に知る必要はないように思えます。宣言されたマトリックスが私が返すものよりも大きい場合でも、エラーが発生します。繰り返しになりますが、Adaの全体的な考え方は強い型付けであるため、おそらくこれは理にかなっています(戻り型を正確に知る必要があります)。
とにかく、私はこれを正しく行っていますか?返された行列のサイズを事前に知らずにこの関数を使用する方法は本当にありませんか?
ありがとう、エダン