如何解决Fortran中的关联链?
ASSOCIATE
特性原则上非常有用,因为它允许为名称赋值,而不会产生显式定义局部变量的语法开销。但是,它的实用性是有限的,因为值仅在ASSOCIATE
语句之后 绑定。这很快导致需要嵌套关联语句,例如
PROGRAM toyexample
IMPLICIT NONE
ASSOCIATE(a => 2)
ASSOCIATE(b => [a,2*a,3*a])
PRINT *,a
PRINT *,b
END ASSOCIATE
END ASSOCIATE
END PROGRAM toyexample
在 Lisp 术语中,这将是 let
的行为,而我试图模仿 let*
的行为,这将允许我编写
PROGRAM toyexample
IMPLICIT NONE
ASSOCIATE(a => 2,b => [a,3*a])
PRINT *,a
PRINT *,b
END ASSOCIATE
END PROGRAM toyexample
Fortran 中是否有任何功能允许我执行此操作?
解决方法
program toyexample1
implicit none
integer,parameter :: a = 11
integer,parameter :: b = 22
integer,parameter :: c = 33
associate(a => b,b => c,c => a)
print *,a,b,c ! Intel Fortran print: 22 33 22,other 22 33 11
end associate
block; integer,parameter :: a = b,b = c,c = a ! NAG Fortran rejected
print *,c ! All compilers print: 22 33 22
end block
block; integer,parameter :: a = 2,b(*) = ([a,2*a,3*a]) ! PGfortran crash
print *,b(:) ! All compilers print 2 2 4 6
end block
end program toyexample1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。