2012-10-28 56 views

回答

3

這不是一個在線遞歸讀(不知道你在哪裏得到了這個詞),這是隱含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 
+4

有一個imortant區別,在於隱含的DO循環版本只是一個讀語句(例如,它不嘗試讀取m * n個線),而上述在M環路版本* n讀取的是m * n行。但是,除此之外,解釋是正確的;隱含的do循環是簡潔的表示法,用於表達類似於do循環但「就地」的東西。 –

+1

我會加入Jonathan Dursi已經說過的,在'read'語句中隱含的do循環以Fortran的形式從_single記錄(例如單行輸入)傳輸所有數據。 「write」語句中隱含的do循環將所有數據傳輸到_single記錄_(例如單行輸出)。 –

+1

還有一個區別:表現。在[this](http://stackoverflow.com/questions/12567087/implied-do-vs-explicit-loop-with-io)問題中發現,顯式循環中的I/O顯着慢於隱含循環中的I/O或簡單的I/O語句,比如'write(10,*)matrix'。但是,這是依賴於編譯器的,並且在讀取/寫入大量數據時可能只會非常重要。 – sigma