Fortan cho phép các chương trình con nguyên tố có ý định (inout) và ý định (out) đối số, nhưng các hàm nguyên tố chỉ được cho phép (in).Chức năng nguyên tố Fortran so với các phần tử con nguyên tố
Tại sao lại như vậy? Nó chỉ là một quy ước kiểu cách, hay có cái gì đó về mặt tổng quát khác nhau về cách gọi các hàm và gọi các chương trình con?
Nói cách khác,
Elemental Integer Function FOO(i)
Integer, intent(in) :: i
...
FOO=something
End Function
và
Elemental Subroutine FOO(i, v)
Integer, intent(in) :: i
Integer, intent(out) :: v
...
v=something
End Subroutine
— là những hiện thực của FOO tương đương hiệu quả?
Tôi không thể hình dung ra, không có ý nghĩa gì khi gọi nó là thủ tục thuần túy nếu nó có tác dụng phụ. Tôi sẽ nguy hiểm một đoán và nói rằng các chức năng nguyên tố có thể hiệu quả hơn trong bối cảnh song song, trong đó nó là rõ ràng cho trình biên dịch như thế nào thủ tục hành xử. – bdforbes
Tôi nghĩ rằng nếu một chương trình con thay đổi chỉ các đối số riêng của nó và không chạm vào các biến toàn cục, thì việc biên dịch chương trình con như vậy không khó. Nó có ý nghĩa để có chức năng như vậy. Ví dụ, một bộ tạo số ngẫu nhiên nên sửa đổi trạng thái của chuỗi số ngẫu nhiên (được mô tả bằng một mảng các số nguyên) và trả về một số ngẫu nhiên. Vì vậy, nó nên có một ý định (inout) và một ý định (ra) đối số. Cấp, người dùng có thể gây rối mọi thứ bằng cách chuyển các biến được chia sẻ cho chương trình con như vậy. Nhưng sau đó một lần nữa, không có mô hình lập trình nào là bằng chứng ngu xuẩn. – drlemon