У меня есть подпрограмма Fortran 90, которая принимает функцию в качестве аргумента, и я хотел бы передать измененную версию этой функции в другую подпрограмму.Я хочу, чтобы программа выглядела примерно так:
subroutine foo(f, ...)
real :: pt(2), dir(2)
interface
function f(x) result(y)
real, intent(in) :: x(2)
real :: y
end function f
end interface
pt = ...
dir = ...
!! Somehow create g(x) = f(pt + x*dir)
call bar(g)
end subroutine foo
subroutine bar(g)
interface
function g(x) result(y)
real, intent(in) :: x
real :: y
end function g
end interface
!! Do stuff with g
end subroutine bar
Мне удалось сделать что-то подобное, когда «g» нужно использовать только обычные переменные, а не функцию.В этом случае я сделал ее глобальной функцией, используя глобальные переменные, и назначил этим глобальным переменным в 'foo'.Тем не менее, я не могу найти способ превратить 'f' в глобальный или присвоить его глобальной функции.
У кого-нибудь есть идеи, как это сделать?Решение может быть таким хакерским, как вы хотите.