1
我發現這個奇怪的聲明中的一段代碼:Fortran中內聯讀取的含義是什麼?
read(10, *) ((matrix(i, j), i=1, n), j=m, 1, -1)
我想知道這是如何內嵌遞歸閱讀的作品。 ((matrix(i, j), i=1, n), j=m, 1, -1)
是什麼意思?
我發現這個奇怪的聲明中的一段代碼:Fortran中內聯讀取的含義是什麼?
read(10, *) ((matrix(i, j), i=1, n), j=m, 1, -1)
我想知道這是如何內嵌遞歸閱讀的作品。 ((matrix(i, j), i=1, n), j=m, 1, -1)
是什麼意思?
這不是一個在線遞歸讀(不知道你在哪裏得到了這個詞),這是隱含do循環嵌套示例,請參閱here,例如,對於一個語法暗示了循環以及這些行爲的很多例子。基本上,隱含的do循環是在單行上寫do循環的一種方式。使用嵌套隱式do循環,您可以在一行中編寫多個do循環。 (請注意,我已經解開了從外部循環向內的隱含do循環(如果存在OP應該注意的任何差異,請在這裏更正我) ):
integer, parameter :: n=<some-value>
integer, parameter :: m=<some-value>
<some-type>, dimension(n,m) :: matrix
integer :: i, j
do j = m,1,-1
do i = 1,n
read(10,*) matrix(i,j)
end do
end do
有一個imortant區別,在於隱含的DO循環版本只是一個讀語句(例如,它不嘗試讀取m * n個線),而上述在M環路版本* n讀取的是m * n行。但是,除此之外,解釋是正確的;隱含的do循環是簡潔的表示法,用於表達類似於do循環但「就地」的東西。 –
我會加入Jonathan Dursi已經說過的,在'read'語句中隱含的do循環以Fortran的形式從_single記錄(例如單行輸入)傳輸所有數據。 「write」語句中隱含的do循環將所有數據傳輸到_single記錄_(例如單行輸出)。 –
還有一個區別:表現。在[this](http://stackoverflow.com/questions/12567087/implied-do-vs-explicit-loop-with-io)問題中發現,顯式循環中的I/O顯着慢於隱含循環中的I/O或簡單的I/O語句,比如'write(10,*)matrix'。但是,這是依賴於編譯器的,並且在讀取/寫入大量數據時可能只會非常重要。 – sigma