gpt4 book ai didi

function - 如何在 Fortran 中给函数名起别名

转载 作者:行者123 更新时间:2023-12-02 18:56:53 26 4
gpt4 key购买 nike

不确定标题是否写得好。欢迎提出建议。

这就是我想做的。检查条件,然后决定在循环中使用哪个函数。例如:

if (a < 0) then
loop_func = func1
else
loop_func = func2
endif

然后,我可以在编写循环时使用loop_func 作为指针。这两个函数采用完全相同的输入,并且根据 a 的值采用不同的方法来解决问题。这将允许我只有一个代码块,而不是两个几乎相同的代码块。这也适用于子例程。

有什么想法可以实现吗?

谢谢。

最佳答案

是的,Fortran 有过程指针,因此您实际上可以为函数名添加别名。下面是一个代码示例,它将一个函数或另一个函数分配给函数指针“f_ptr”。此后程序可以使用“f_ptr”并且将调用所选函数。

module ExampleFuncs

implicit none

contains

function f1 (x)
real :: f1
real, intent (in) :: x

f1 = 2.0 * x

return
end function f1


function f2 (x)
real :: f2
real, intent (in) :: x

f2 = 3.0 * x**2

return
end function f2

end module ExampleFuncs


program test_func_ptrs

use ExampleFuncs
implicit none

abstract interface
function func (z)
real :: func
real, intent (in) :: z
end function func
end interface

procedure (func), pointer :: f_ptr => null ()

real :: input

write (*, '( / "Input test value: ")', advance="no" )
read (*, *) input

if ( input < 0 ) then
f_ptr => f1
else
f_ptr => f2
end if

write (*, '(/ "evaluate function: ", ES14.4 )' ) f_ptr (input)

stop

end program test_func_ptrs

关于function - 如何在 Fortran 中给函数名起别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8612466/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com