爲什麼Fortran將標量表達式提升爲數組,表達式,但不是作爲過程的參數?特別是,爲什麼標準組織做出這個設計決定?僅僅是因爲含糊不清,程序是否過載?在這種情況下的錯誤信息可以作爲替代方法嗎?沒有提升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
當然可以。大多數內置函數都是元素而不是它們。而一個元素函數需要arity> 1來將一個標量提升爲一個數組。我的問題本來會更好地集中在賦值語句上,這將促進一個標量。但是這更有意義:賦值語句是特殊的。我最近一直在尋找太多的APL ...... – user2023370