06/07/01 11:27:14
>>572
いまいち質問がはっきりしないので外しているかもしれないが・・・
この種の問題は他の言語から来た人などがよく出会う問題だ。
FORTRANでfunctionを引数とすることには、規格上のあいまいさの問題が
あることを知っておくとよい。
FORTRANでは副プログラムに変数を引き渡すとき、参照渡し(アドレス渡し、CallByReference)
になっている。一方、関数自体は値を値として持っているのかどうか規格で定められていない。
C言語やPASCALなんかでは値を返していると思う。(たしか、そうだったと、思うw)
だから、引数に関数を置いたときの挙動は処理系に依存している。
大昔では、HITAC暴走、FACOMコンパイラエラー、ACOS、VAXはOKだったか?
また、値が返ってくるような引数に(F90のINTENT(INOUT)やINTENT(OUT))
のような関数を置くのは明らかにおかしい。
======================================================================
さて、>>572のプログラムは、つづり等の間違いを除けば一応正しい。
ただ、引数の型をきっちり合わせていないとうまくいかない可能性がある。
つまり S=f(3.0,g,4.0,4.0,4.0)
また g(x,h(x),d,e) こういう形にしたい場合は、第二引数は普通の変数として
定義しておけばいいはず。 F90以降ならINTENT(IN)属性を付けておけば
コンパイラも多分おこらないだろう。
ま、一番確かなのはコンパイラのマニュアルを読むことだw