暗示在数组构造函数中重复构造标量值

时间:2019-06-24 12:55:07

标签: arrays fortran

我试图弄清楚为什么将标量放置在数组构造函数中的do构造之前会产生它的答案。

我大致了解do构造,即(/(i,i=1,5)/)等效于(/1,2,3,4,5/)

real, dimension(4) :: a
integer :: i
a=(/(50,i,i=1,2)/)

这将产生数组50.0000000, 1.00000000, 50.0000000, 2.00000000。充其量我会期望出现错误,因为步长不能产生足够的值来填充数组。

1 个答案:

答案 0 :(得分:4)

由多个50产生的数组是预期的数组。

部分问题文本与代码所显示的内容不匹配

  

将标量放置在数组构造函数中的do构造之前

[(50,i,i=1,2)]中(为了清楚起见,使用Fortran 2003 [...]),标量值50并非“隐含于”隐含的行为之前,而是其明显的一部分。可以和

相比
a = [50, (i,i=1,3)]

这将导致构造数组[50, 1, 2, 3]

数组构造函数隐含的行为的正式语法为

  

ac-value-list ac-implied-do-control

因此可以看出,即使仅使用单个值是很常见的,多个值也可以成为隐含的​​do控制范围的一部分。有了这样的多个值,它们就针对隐含的do的每次迭代都进行了评估(并且50每次都进行相同的评估),并在数组构造中使用。