У Fortran нет шаблонов, но вы можете поместить код, общий для функций, обрабатывающих разные типы во включенном файле, как kludge для имитации шаблонов, как показано в этом коде:
! file "cumul.inc"
! function cumul(xx) result(yy)
! return in yy(:) the cumulative sum of xx(:)
! type, intent(in) :: xx(:)
! type :: yy(size(xx))
integer :: i,n
yy = 0
n = size(xx)
if (n < 1) return
yy(1) = xx(1)
do i=2,n
yy(i) = yy(i-1) + xx(i)
end do
return
! end function cumul
! end file "cumul.inc"
module foo
implicit none
integer, parameter :: sp = kind(1.0), dp = kind(1.0d0)
interface cumul
module procedure cumul_double,cumul_real,cumul_int
end interface cumul
contains
!
function cumul_double(xx) result(yy)
real(kind=dp), intent(in) :: xx(:)
real(kind=dp) :: yy(size(xx))
include "cumul.inc"
end function cumul_double
!
function cumul_real(xx) result(yy)
real(kind=sp), intent(in) :: xx(:)
real(kind=sp) :: yy(size(xx))
include "cumul.inc"
end function cumul_real
!
function cumul_int(xx) result(yy)
integer, intent(in) :: xx(:)
integer :: yy(size(xx))
include "cumul.inc"
end function cumul_int
end module foo
program xcumul
use foo, only: cumul
print*,cumul([10,20,30])
print*,cumul(sin([10.0,20.0,30.0]))
print*,cumul(sin([10.0d0,20.0d0,30.0d0]))
end program xcumul
! output:
! 10 30 60
! -0.5440211 0.36892414 -0.6191075
! -0.5440211108893698 0.3689241398382579 -0.6191074842546039
инструмент, упомянутый в статье
Car, David и Michael List (2010). PyF95 ++: возможность создания шаблонов для языка Fortran 95/2003. ACM Fortran Forum 29 (1), 2-20.
может вас заинтересовать. Я не пробовал.
Нет, анаконда использует совершенно разные среды, и независимо от того, что она понижает, она делает это в своих собственных средах. Поэтому, если вы используете среды anaconda в своих приложениях, вам не нужно ничего переустанавливать, но если вы используете другую среду (например, только pip), вам необходимо убедиться, что вы также установили все необходимые пакеты. Кроме того, если пакет установлен с использованием pip и не установлен в conda, он автоматически переключится на pip, поэтому проблем там нет.