Chúng ta đều biết rằng vòng lặp DO
mạnh hơn câu lệnh FORALL
ở Fortran. Tức là, bạn luôn có thể thay thế một số FORALL
bằng một số DO
, nhưng không phải ngược lại.Tương đương với IF và WHERE
Còn câu lệnh và khối WHERE
thì sao?
Tôi luôn có thể thay thế IF
bởi một WHERE
? Có luôn luôn có thể mã các điều kiện và phân nhánh với một WHERE
, do đó tránh IF
?
Mục đích ban đầu của FORALL là cho phép các bài tập mảng đeo mặt nạ được thực hiện song song - nó đến từ một biến thể gọi là High Performance Fortran và đã được thông qua vào Fortran 95. Thật không may, ngữ nghĩa của FORALL không có lợi cho việc song song, vì vậy Fortran 2008 đã thêm DO CONCURRENT, không chỉ quen thuộc với các lập trình viên của Fortran mà còn có ngữ nghĩa tốt hơn cho việc song song. Bạn có thể muốn nhìn vào MERGE, có thể, với một số mặt nạ thông minh, khá mạnh mẽ. –
Tiếp tục những gì @SteveLionel đã nói, lưu ý rằng 'MERGE' * có thể * được sử dụng bên trong khối' WHERE' trong khi câu lệnh 'IF' * không thể *. –
Cũng lưu ý rằng 'FORALL' hoàn toàn là một câu lệnh gán hoặc khối, trong khi' DO' là một cấu trúc điều khiển lưu lượng tổng quát hơn. – milancurcic