我想知道Fortran是否有办法做这样的事情:
program test
real(kind=4),dimension(2) :: vector
vector(1)=3
vector(2)=4
print *, func(vector)
end program test
FUNCTION func(x,y)
func=x+y
END FUNCTION func
这是使用向量作为函数的输入,使得函数func
自动获得vector(1)
为x
而vector(2)
为y
}。
答案 0 :(得分:0)
你的问题没有明确定义,虽然它可能完全违背了SO的基本公理,但我提出了一个简短的“面向建议”的答案。
Fortran承认了几个“样式”,包括(除了数组的处理)示例中的一个样式,其中函数是在没有上下文的情况下定义的,并且预计会在链接时找到。
我的建议是熟悉现代Fortran。有一些很好的资源,其中包括:
您需要的最相关的更新是在模块中定义您的功能或在程序中“包含”它。我在下面展示了相应的例子:
program test
implicit none
integer, parameter :: rk = selected_real_kind(6)
real(kind=rk),dimension(2) :: vector
vector(1)=3
vector(2)=4
print *, func(vector)
contains
function func(x)
real(kind=rk), intent(in) :: x(:)
real(kind=rk) :: func
func = x(1) + x(2)
end function func
end program test
我所做的改变:
implicit none
开始您的代码。对于任何新代码,这被认为是强制性的,因为如果省略声明或在变量名中输入拼写错误,它会阻止编译器“神奇地”分配变量类型。selected_real_kind
内在函数使用命名常量。contains
部分之后将功能“放入”程序中。这允许编译器检查您是否正确调用了该函数。您可以考虑:首先使用两个参数,但必须将函数调用为func(vector(1), vector(2))
,传递向量,但使用sum
intrisic作为func = sum(x)
(其中) x是一个数组)。