我正在尋找一種純粹的方式來訪問時間信息。我想到了標準編譯器的內在函數和子程序(date_and_time
,cpu_time
,system_clock
,ltime
,ctime
,...),格式對我來說並不重要。我也想過MPI函數,但它與內在函數相同,都有不純的函數。在Fortran中有純粹的時間嗎?
下面是一個小例子:
elemental subroutine add(message, text)
! function add
IMPLICIT NONE
character(len=:),allocatable,intent(inout) :: message
character(len=*), intent(in) :: text
character(len=1), parameter :: nl=char(10)
character(10) :: time
! character(8) :: date
! time= 'hhmmss.sss'
call DATE_AND_TIME(time)
Message= Message//time////text//nl
end subroutine add
,我得到一個邏輯錯誤:
Error: Subroutine call to intrinsic ‘date_and_time’ at (1) is not PURE
因此,我遊蕩,如果有時間信息的途純是否存在,或者如果它純粹是不可能的(可能是因爲它必須使用cpu信息,由於我未知的原因,這可能是線程不安全的)。
也許,一個子問題可能有一個解決方案,迫使編譯器考慮純粹(或任何其他類型的函數)的date_and_time
?
對於那些需要訪問非純內在函數的人來說,你是否滿意於「不純元素」? – francescalus
@francescalus你是對的'ltime'和'ctime'不是Fortran標準內在函數,也不是MPI函數。但是,如果它能完成這項工作,我會接受它作爲解決方案。我想爲這個例子保留一個「純元素」子程序。否則'不純元素'是編譯示例的一個選項,但不能回答這個問題。 –
維基百科(https://en.wikipedia.org/wiki/Pure_function)指出返回當前時間的函數是不純的。我同意維基百科。但你不必這樣做。 –