Wszyscy wiemy, że pętla DO
jest silniejsza niż oświadczenie FORALL
w Fortran. Oznacza to, że zawsze można zastąpić FORALL
przez DO
, ale nie na odwrót.Równoważność IF i WHERE
Co z oświadczeniem i blokiem WHERE
?
Czy mogę zawsze zastąpić IF
przez WHERE
? Czy zawsze można kodować warunkowe i bifurkacje za pomocą WHERE
, unikając w ten sposób IF
?
Oryginalny intencją forall było umożliwienie zamaskowani zadania array być wykonywane równolegle - pochodzi wariant o nazwie High Performance Fortran i został przyjęty do Fortran 95. Niestety, semantyka FORALLA nie sprzyjała zrównolegleniu, więc Fortran 2008 dodał DO CONCURRENT, który jest nie tylko bardziej znajomy dla programistów Fortrana, ale ma również lepszą semantykę dla równoległości. Możesz spojrzeć na MERGE, który przy pomocy sprytnych masek może być dość potężny. –
Kontynuując, co @SteveLionel powiedział, należy pamiętać, że "MERGE" * może * być używane wewnątrz bloku 'WHERE', podczas gdy instrukcja' IF' nie może *. –
Należy również pamiętać, że 'FORALL' jest czysto instrukcją przypisania lub blokiem, natomiast' DO' jest bardziej ogólną konstrukcją kontroli przepływu. – milancurcic