Fortran
Intrinsieke procedures
Zoeken…
Opmerkingen
Veel van de beschikbare intrinsieke procedures hebben argumenttypen gemeen. Bijvoorbeeld:
- een logisch argument
MASK
dat elementen vanMASK
selecteert die moeten worden verwerkt - een geheel getal scalair argument
KIND
dat het soort functieresultaat bepaalt - een geheel getalargument
DIM
voor een verkleiningsfunctie die de dimensie regelt waarover de verkleining wordt uitgevoerd
PACK gebruiken om elementen te selecteren die aan een voorwaarde voldoen
De intrinsieke pack
verpakt een array in een vector, waarbij elementen worden geselecteerd op basis van een bepaald masker. De functie heeft twee vormen
PACK(array, mask)
PACK(array, mask, vector)
(dat wil zeggen, het vector
is optioneel).
In beide gevallen is array
een array en een mask
van het logische type en compatibel met array
(een scalaire of een array met dezelfde vorm).
In het eerste geval is het resultaat rang-1 reeks van type en type parameters van array
waarbij het aantal elementen het aantal echte elementen in het masker is.
integer, allocatable :: positive_values(:)
integer :: values(5) = [2, -1, 3, -2, 5]
positive_values = PACK(values, values>0)
resulteert in positive_values
die de array [2, 3, 5]
.
Met het vector
rang-1 argument aanwezig is het resultaat nu de grootte van de vector
(die minstens evenveel elementen moet hebben als er echte waarden in het mask
.
Het effect met vector
is om die array terug te geven met de initiële elementen van die array overschreven door de gemaskeerde elementen van de array
. Bijvoorbeeld
integer, allocatable :: positive_values(:)
integer :: values(5) = [2, -1, 3, -2, 5]
positive_values = PACK(values, values>0, [10,20,30,40,50])
resulteert in positive_values
[2,3,5,40,50]
die de array zijn [2,3,5,40,50]
.
Opgemerkt moet worden dat, ongeacht de vorm van de argumentarray array
het resultaat altijd een array-1 array is.
Naast het selecteren van de elementen van een array die aan een maskeervoorwaarde voldoet, is het vaak nuttig om de indices te bepalen waarvoor aan de maskeervoorwaarde wordt voldaan. Dit gemeenschappelijke idioom kan worden uitgedrukt als
integer, allocatable :: indices(:)
integer i
indices = PACK([(i, i=1,5)], [2, -1, 3, -2, 5]>0)
resulterend in indices
die de array zijn [1,3,5]
.