RosettaCodeData/Task/List-comprehensions/Fortran/list-comprehensions.f

32 lines
944 B
Fortran

!-*- mode: compilation; default-directory: "/tmp/" -*-
!Compilation started at Fri Jun 7 23:39:20
!
!a=./f && make $a && $a
!gfortran -std=f2008 -Wall -fopenmp -ffree-form -fall-intrinsics -fimplicit-none f.f08 -o f
! 3 4 5
! 5 12 13
! 6 8 10
! 8 15 17
! 9 12 15
! 12 16 20
!
!Compilation finished at Fri Jun 7 23:39:20
program list_comprehension
integer, parameter :: n = 20
integer, parameter :: m = n*(n+1)/2
integer :: i, j
complex, dimension(m) :: a
real, dimension(m) :: b
logical, dimension(m) :: c
integer, dimension(3, m) :: d
a = [ ( ( cmplx(i,j), i=j,n), j=1,n) ] ! list comprehension, implicit do loop
b = abs(a)
c = (b .eq. int(b)) .and. (b .le. n)
i = sum(merge(1,0,c))
d(2,:i) = int(real(pack(a, c))) ! list comprehensions: array
d(1,:i) = int(imag(pack(a, c))) ! assignments and operations.
d(3,:i) = int(pack(b,c))
print '(3i4)',d(:,:i)
end program list_comprehension