Fortran
Intrinsiska procedurer
Sök…
Anmärkningar
Många av de tillgängliga inneboende procedurerna har gemensamma argumenttyper. Till exempel:
- ett logiskt argument
MASK
som väljer element i inputmatriser som ska behandlas - ett heltalskalarargument
KIND
som bestämmer typen av funktionsresultat - ett heltalargument
DIM
för en reduktionsfunktion som styr den dimension som reduktionen utförs över
Använd PACK för att välja element som uppfyller ett villkor
Den inre pack
packar en matris i en vektor och väljer element baserade på en given mask. Funktionen har två former
PACK(array, mask)
PACK(array, mask, vector)
(det vill säga vector
är valfritt).
I båda fallen är array
en matris och en mask
av logisk typ och kan anpassas till array
(antingen en skalär eller en matris med samma form).
I det första fallet är resultatet rank-1 array av typ- och typparametrar av array
med antalet element som är antalet sanna element i masken.
integer, allocatable :: positive_values(:)
integer :: values(5) = [2, -1, 3, -2, 5]
positive_values = PACK(values, values>0)
resulterar i positive_values
värden som arrayen [2, 3, 5]
.
Med vector
rank-1-argumentet närvarande är resultatet nu storleken på vector
(som måste ha minst lika många element som det finns sanna värden i mask
.
Effekten med vector
är att returnera den arrayen med de initiala elementen i den arrayen som skrivs över av de maskerade elementen i array
. Till exempel
integer, allocatable :: positive_values(:)
integer :: values(5) = [2, -1, 3, -2, 5]
positive_values = PACK(values, values>0, [10,20,30,40,50])
resulterar i positive_values
[2,3,5,40,50]
arrayen [2,3,5,40,50]
.
Det bör noteras att, oberoende av formen av argumentet array
resultatet är alltid en rang-1 matris.
Förutom att välja elementen i en matris som uppfyller ett maskeringsvillkor är det ofta användbart att bestämma de index för vilka maskeringsvillkoret uppfylls. Detta vanliga formspråk kan uttryckas som
integer, allocatable :: indices(:)
integer i
indices = PACK([(i, i=1,5)], [2, -1, 3, -2, 5]>0)
vilket resulterade i att indices
är matrisen [1,3,5]
.