Sappiamo tutti che il ciclo DO
è più potente dell'istruzione FORALL
in Fortran. Cioè, è sempre possibile sostituire uno FORALL
con un DO
, ma non viceversa.Equivalenza di IF e DOVE
E l'istruzione WHERE
e il blocco?
Posso sempre sostituire lo IF
con un WHERE
? È sempre possibile codificare condizionali e biforcazioni con un WHERE
, evitando così il IF
?
L'intento originale di FORALL è stato quello di consentire le assegnazioni di matrice mascherati per essere condotti in parallelo - che proveniva da una variante denominata High Performance Fortran ed è stato adottato in Fortran 95. Sfortunatamente, la semantica di FORALL non favoriva la parallelizzazione, quindi Fortran 2008 ha aggiunto DO CONCURRENT che non è solo più familiare ai programmatori di Fortran, ma ha anche una semantica migliore per la parallelizzazione. Potresti voler guardare MERGE, che può, con alcune maschere intelligenti, essere piuttosto potente. –
Proseguendo su ciò che ha detto @SteveLionel, si noti che 'MERGE' * può * essere utilizzato all'interno del blocco' WHERE' mentre un'istruzione 'IF' * non può *. –
Ricorda inoltre che 'FORALL' è puramente un'istruzione o un blocco di assegnazione, mentre' DO' è un costrutto di controllo del flusso più generale. – milancurcic