توابع يک خطی Statement Functions
وقتی توابعی که بکار می بريد، آنچنان کوتاه هستند که در يک خط تمام می شوند، می توانيد از اين ساختار استفاده کنيد.
Function_name({list of parameters}) = expression
مثلاً تابع نيوتن که در بالا تعريف شد را می توان با اين ساختار به شکل زير نوشت.
Newton(m1, m2, r) = -6.672E-11*m1*m2/r**2
زيربرنامه های خارجی External Subroutines
ساختار زير برنامه ها به شکل زير است.
SUBROUTINE name {dummy argument list}
local variables declaration
body of subroutine…
END SUBROUTINE name
تمام متغيرها با آدرس فرستاده می شوند “call by reference” (مانند VAR arg در Pascal يا &arg در C++)، يعنی آدرس متغير در حافظه به زيربرنامه فرستاده می شود، و زيربرنامه می تواند متغير را مستقيماً تغيير دهد. در توابع نيز چنين است، اما فرض می گردد که توابع متغيرهای ورودی را تغيير نمی دهند.
دستورات RETURN, SAVE, EXTERNAL, INTERNAL
همة روالهای خوب بايد يک نقطه ورود و يک نقطه خروج داشته باشند، اما گاهی لازم است که زيربرنامه در نقطه ای ديگر پايان يابد (برای مثال هنگام ايجاد خطا). برای اينکار از دستور RETURN استفاده می گردد. اين دستور اجرای زير برنامه را متوقف کرده و برنامه را به روال فراخوانی کننده اين زير برنامه باز می گرداند.
پس از پايان يک زيربرنامه، مقدار همة متغيرهای محلی از بين می رود. اگر بخواهيم اين مقادير در اجرای بعدی زيربرنامه موجود باشد(STATIC ALLOCATION)، بايد اين موضوع را برای مترجم مشخص کنيم تا مترجم بداند که بايد مقدار متغيرها را ذخيره کند. اين موضوع را با دستور SAVE به مترجم اصلاع می دهيم. ساختار اين دستور به اين شکل است:
SAVE [{list of local variables to be saved}]
وقتی يک تابع بعنوان متغير به يک روال ديگر فرستاده می شود، نوع تابع بايد قبل از ارسال بعنوان داخلی يا خارجی تعريف گردد. اين تعريف با دستورات زير صورت می گيرد.
INTRINSIC {list of function names}
EXTERNAL {list of function names}
برای مثال
PROGRAM func
EXTERNAL CTN
INTRINSIC SIN, COS
REAL::angle=0.785 !...pi/4
REAL::sine,cosine,tangent
CALL TRIG(angle,SIN,sine)
WRITE(*,*) 'SIN(0.785)=',sine
CALL TRIG(angle,COS,cosine)
WRITE(*,*) 'COS(0.785)=',cosine
CALL TRIG(angle,CTN,cotangent)
WRITE(*,*) 'COTAN(0.785)=',cotangent
READ*,r
END PROGRAM func
SUBROUTINE TRIG(X,F,Y)
Y = F(X)
RETURN
END SUBROUTINE TRIG
FUNCTION CTN(X)
CTN = COS(X)/SIN(X)
RETURN
END FUNCTION CTN