Динамическое создание функции из другой функции

У меня есть подпрограмма 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' в глобальный или присвоить его глобальной функции.

У кого-нибудь есть идеи, как это сделать? Решение может быть таким хакерским, как вы хотите.

Ответы на вопрос(2)

Ваш ответ на вопрос