1954'de IBM tarafından üretilen IBM 704 için ilk sürümü John Backus ve ekibi tarafından geliştirilmiştir. Backus ve ekibi Kasım 1954'de "The IBM Mathematical FORmula TRANslating System: Fortran" isimli raporu yayınlamışlardır.
I will try to give you information about the use of Fortran Programming Language. This series will proceed step by step. At the end of our project, we will have learned the Fortran Programming and Calculus Language. I will strive to give you a useful education.
Bu seride sizlere Fortran Programlama Dili kullanımı hakkında bilgiler vermeye çalışacağım. Bu seri adım adım ilerleyecektir. Projemizin sonunda Fortran Programlama ve Hesaplama Dilini öğrenmiş olacağız. Sizlere faydalı bir eğitim serisi vermek için çabalayacağım.
pure recursive integer function fibonacci(n) result(fib)
integer,intent(in) :: n
if(n == 0)then
fib = 0
elseif(n == 1)then
fib = 1
else
fib = fibonacci(n-1)+fibonacci(n-2)
endif
endfunction fibonacci
write(* , *)map(fibonacci,[17,5,13,22])
1597 5 233 17711
pure logical function even(x)
integer,intent(in) :: x
even = .false.
if(mod(x,2) == 0)even = .true.
endfunction even
write(* , *)filter(even,[1,2,3,4,5])
2 4
write(* , *)filter(even,map(fibonacci,arange(1,10)))
2 8 34
pure real function add(x,y)
real,intent(in) :: x,y
add = x+y
endfunction add
pure real function mult(x,y)
real,intent(in) :: x,y
mult = x*y
endfunction mult
! left-fold an array using add to compute array sum
write(* , *)foldl(add,0.,arange(1.,5.))
15.0000000
! left-fold an array using mult to compute array product
write(* , *)foldl(mult,1.,arange(1.,5.))
120.000000
Yukarıdaki, Fortran intrinsik bileşenini kavramın bir kanıtı olarak yeniden yaratan örnektir. Tabii ki iç işlevler mümkün olduğunca kullanılmalıdır.
''foldl- foldr- foldt'' kullanıcı tanımlı işlev yapılandırılmışsa aynı sonucu gösterir.
Katlayabilmek için ''fold'' ve ''unfold'' bir başlangıç değerine göre bir dizi oluşturmak için kullanılabilir 'x' ve bir işlev 'f' de üretilen diziye eşittir. [x, f(x), f(f(x)), f(f(f(x))), ... ]. Örnek verirsek;
pure real function multpt1(x)
real,intent(in) :: x
multpt1 = 1.1*x
endfunction multpt1
write(* , *)unfold(multpt1,[1.],5)
1.00000000 1.10000002 1.21000004 1.33100009 1.46410012
write(* , *)set([1,1,2,2,3])
1 2 3
Kümeler üzerinde işlem Ortak fonksiyonlar, ''union, intersection, ve complement'' ile mevcuttur:
! unique elements that are found in either array
write(* , *)union([1,2,2],[2,3,3,4])
1 2 3 4
! unique elements that are found in both arrays
write(* , *)intersection([1,2,2],[2,3,3,4])
2
! unique elements that are found first but not in second array
write(* , *)complement([1,2,2],[2,3,3,4])
1