2

私はarity1、say func1(-)、およびのいくつかの関数を定義しましたfunc2(-)。私はそれらをテストし、それらが実際に想定されていることを実行することを確認しました。

func3(-)の差を出力する3番目の関数、たとえば、を定義したいと思います。これが私がすることですfunc1(-)func2(-)

func3(k) = {j=func1(k)-func2(k); print(j)}

それにもかかわらず、それは本来あるべきものを返しません。func1(5)10をfunc2(5)出力し、2を出力するとします。それでは、8func3(5)を出力する必要がありますか?func1(5)代わりに、ある行の出力、別の行の出力、そしてゼロを返しますfunc2(2)(対応する出力の差が0ではない場合でも)。

の定義の何が問題になっているのか知っていますfunc3(-)か?

4

1 に答える 1

5

GPユーザー関数は、最後に評価された値を返します。ここでは、「print(j)」コマンドの結果です。このコマンドは、j(副作用)を出力し、「void」を返します。これは、ここに示すように、値を指定する必要がある場合に0に型キャストされます。

f1(x) = 10
f2(x) = 2
f3(x) = f1(x) - f2(x)

正しく8を返します。func1/func2関数のコードを指定していませんが、値を返すことを期待して、「print」ステートメントを含めたと思います。これが、0の前の異なる行で出力を取得する理由です。

この「return-last-evaluation-result」の動作が気に入らない場合は、明示的な「return(result)」ステートメントを使用できます。

于 2013-04-05T15:24:34.790 に答える