Я только что наткнулся на тот факт, что компилятор позволяет мне использовать целочисленные массивы в качестве индексов для других массивов.Например:
implicit none
real*8 :: a(3), b(2)
integer :: idx(2)
a=1.d0
idx=(/1,2/)
b = a(idx)
print*,shape(b)
print*,b
print*
end
Учитывая тот факт, что кажется, что это работает как с gfortan, так и с компилятором PGI, я задаюсь вопросом, позволяет ли мне использовать эту возможность языка, а не компилятор чего-либо.Я был бы признателен, если бы кто-нибудь более знающий, чем я, мог бы прокомментировать, если это действительно языковая функция.
И если это так, то я был бы признателен, если бы кто-нибудь изложил точные языковые правила того, как такие конструкции интерпретируются в многомерном случае, как здесь:
implicit none
real*8 :: aa(3,3), bb(2,2)
integer :: idx(2)
do i=1,3 ; do j=1,3
aa(i,j) = 1.d0*(i+j)
enddo; enddo
bb=aa(idx,idx)
print*,shape(bb)
print*,bb
end