Я только что наткнулся на то, что компилятор позволяет мне использовать целые массивы как индексы для других массивов. Например:индексы массива с массивом
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