Fortran中的标量值究竟是什么,以及如何从它们转换为它们

L5R*_*5RK 4 fortran

一些背景.我有这段代码:

function areeq(array1,array2) result(eq)
real :: array1(1:100,1:100), array2(1:100,1:100)
logical :: eq
integer :: x,y,f
do x=1,100
  do y = 1,100
    print *,array1(x:x,y:y)
    print *,array2(x:x,y:y)
    if(.not.(array1(x:x,y:y) == array2(x:x,y:y))) then
      eq = .false.
      return
    end if

    read *,f
  end do
end do
eq = .true.
return
end function
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试运行它时,它会抛出此错误消息:

if(.not.(array1(x:x,y:y) == array2(x:x,y:y))) then
       1
Error: IF clause at (1) requires a scalar LOGICAL expression
Run Code Online (Sandbox Code Playgroud)

这是我第二次遇到需要Scalar的问题,尽管我最后一次成功地进行了临时工作,但我真的应该并且需要能够正确处理它们.

所以,TL; DR:这段代码出了什么问题,在这种情况下我应该怎样做呢?

fra*_*lus 7

特定

integer n
real x(5)
Run Code Online (Sandbox Code Playgroud)

然后,给出适当的定义 n

x(n)
Run Code Online (Sandbox Code Playgroud)

是的数组元素x,和

x(n:n)
Run Code Online (Sandbox Code Playgroud)

是一个数组部分x.

数组元素是标量,而数组部分本身是大小为1的数组.

正如史蒂夫莱昂内尔所说,就问题而言,

array1(x:x,y:y) == array2(x:x,y:y)
Run Code Online (Sandbox Code Playgroud)

是一个数组值表达式(虽然大小为1),可以将其缩减为标量表达式ALL.然而

array1(x,y) == array2(x,y)
Run Code Online (Sandbox Code Playgroud)

是一个标量表达式,两个操作数都是标量数组元素.


在引用中,x(n)我们有一个标量数组元素n.对于n数组,我们将使用数组作为向量下标x.