首页 > 解决方案 > 隐含在数组构造函数中构造重复的标量值

问题描述

我试图弄清楚为什么在数组构造函数中的 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。充其量我会期望一个错误,因为步长不会产生足够的值来填充数组。

标签: arraysfortran

解决方案


使用多个 s 生成的数组50是预期的。

部分问题文本与代码发生的情况不匹配:

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

[(50,i,i=1,2)](为了清楚起见,使用 Fortran 2003 [...])标量值50不是“在”隐含的 do 之前,而是它的一个明确部分。这可以与

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

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

数组构造函数的隐含 do 的正式语法是

( ac-value-list , ac-implied-do-control )

因此可以看出,多个值可以是隐含的 do 控制范围的一部分,即使通常只使用单个值。对于这样的多个值,它们都针对隐含的 do 的每次迭代进行评估(并且50每次评估相同)并用于数组构造。


推荐阅读