Fortran中的内联读取是什么意思?

Fortran中的内联读取是什么意思?,fortran,Fortran,我在一段代码中发现了这种奇怪的说法: read(10, *) ((matrix(i, j), i=1, n), j=m, 1, -1) 我想知道这种内联递归读取是如何工作的。这是什么意思 matrixi,j,i=1,n,j=m,1,-1?这不是一个在线递归读取,不确定这个术语是从哪里来的,这是嵌套隐含do循环的一个示例,请参阅,例如,有关隐含do循环的语法和许多正在运行的示例。基本上,隐含do循环是在单行上编写do循环的一种方法。使用嵌套的隐含do循环,您可以在一行上写入多个do循环 在你的情

我在一段代码中发现了这种奇怪的说法:

read(10, *) ((matrix(i, j), i=1, n), j=m, 1, -1)
我想知道这种内联递归读取是如何工作的。这是什么意思 matrixi,j,i=1,n,j=m,1,-1?

这不是一个在线递归读取,不确定这个术语是从哪里来的,这是嵌套隐含do循环的一个示例,请参阅,例如,有关隐含do循环的语法和许多正在运行的示例。基本上,隐含do循环是在单行上编写do循环的一种方法。使用嵌套的隐含do循环,您可以在一行上写入多个do循环

在你的情况下,你所拥有的等同于某人。请在这里纠正我,如果有任何差异,OP应该注意,我已经将隐含的do循环从外部循环向内部拆开:

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
这不是一个内嵌的递归读取不确定这个术语是从哪里来的,这是一个嵌套的隐含do循环的示例,请参阅,例如,有关隐含do循环的语法和许多正在运行的示例。基本上,隐含do循环是在单行上编写do循环的一种方法。使用嵌套的隐含do循环,您可以在一行上写入多个do循环

在你的情况下,你所拥有的等同于某人。请在这里纠正我,如果有任何差异,OP应该注意,我已经将隐含的do循环从外部循环向内部拆开:

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

有一个重要的区别,即隐含的do循环版本只是一个read语句,例如,它不尝试读取mn行,而上面的版本循环mn行,因此是m*n行。但除此之外,解释是正确的;隐含do循环是一种简洁的表示法,用于表示类似于do循环但在适当位置的内容。我要补充Jonathan Dursi已经说过的内容,即read语句中的隐含do循环以Fortran术语从一条记录(例如一行输入)传输所有数据。write语句中隐含的do循环将所有数据传输到单个记录,例如输出的单行。还有另一个区别:性能。有问题的是,我们发现显式循环中的I/O速度明显慢于隐含循环或简单I/O语句(如write10、*矩阵)。然而,这取决于编译器,并且可能只有在您必须读/写大量数据时才真正重要。有一个重要的区别,即隐含的do循环版本只是一个read语句,例如,它不尝试读取mn行,而上面的版本循环读取mn行,因此它是m*n行。但除此之外,解释是正确的;隐含do循环是一种简洁的表示法,用于表示类似于do循环但在适当位置的内容。我要补充Jonathan Dursi已经说过的内容,即read语句中的隐含do循环以Fortran术语从一条记录(例如一行输入)传输所有数据。write语句中隐含的do循环将所有数据传输到单个记录,例如输出的单行。还有另一个区别:性能。有问题的是,我们发现显式循环中的I/O速度明显慢于隐含循环或简单I/O语句(如write10、*矩阵)。然而,这取决于编译器,可能只有在您必须读/写大量数据时才有意义。