式の配列にスカラー式を宣言しますが、プロシージャーの引数としてスカラー式を宣言しないのはなぜですか?特に、標準化団体がこの設計決定をしたのはなぜですか?プロシージャが過負荷になっている場合は、あいまいさのためだけですか?その状況でのエラーメッセージが別の方法ですか?Fortranの配列へのスカラー引数の持ち上げがありません
たとえば、次のコードでは、最後の文x = foo(7)
は、GFortranエラー:Error: Rank mismatch in argument 'a' at (1) (1 and 0)
を生成します。
module m
public :: foo
contains
function foo(a) result(b)
integer, dimension(:) :: a
integer, dimension(size(a)) :: b
b = a+1
end function foo
end module m
program p
use m
integer, dimension(4) :: x
integer, parameter, dimension(4) :: y = (/1,2,3,4/)
x = 7
x = foo(x)
x = foo(y)
x = foo(x + 7)
x = foo(7)
end program p
この質問では、配列割り当てがスカラー値ソースを配列ターゲットに昇格させる理由について質問する必要があります。配列関数とは異なります。私はそれが単に便利な特別なケースだと思う。下の口頭で感謝していただいたコメント。
これは、基本的には機能が何をすることができるかについて多くの制約を課すため、OPが望むほど一般的ではありません。 – bdforbes
もちろんです。ほとんどの組み込み関数は要素ではありません。また、スカラーを配列に昇格させるためには、要素関数に> 1が必要です。私の質問はスカラーを宣伝する代入ステートメントに焦点を当てた方が良いでしょう。しかし、それは理にかなっています:割り当てステートメントは特別です。私は最近、あまりAPLを見ています... – user2023370