2013-02-09 81 views
2

我已經定義了幾個函數1,比如func1(-)func2(-)。我測試了他們,看到他們實際上做了他們應該做的事情。Pari/GP:用戶定義函數

我希望定義第三個函數,func3(-),輸出func1(-)func2(-)的差值。這是我做的

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

儘管如此,它並沒有返回它應該做的。讓我們假設func1(5)輸出10和func2(5)輸出2.然後,func3(5)應該輸出8,對嗎?它返回一行中的輸出func1(5),另一行中輸出func2(2),然後返回一個零(即使相應輸出的差異不爲0)。

你知道func3(-)的定義有什麼問題嗎?

回答

4

GP用戶函數返回上一次評估的值。在這裏,它是'print(j)'命令的結果,打印j(副作用)並返回'void', ,當它必須被賦予一個值時,它的類型轉換爲0,如下所示。

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

正確返回8.你沒有給的代碼爲您FUNC1/FUNC2 功能,但我希望你提供一個「打印」的語句,也許期待它 返回一個值。這就是爲什麼你在0之前的不同行上得到輸出。如果你不喜歡這種'return-last-evaluation-result'行爲,你可以使用顯式的'return(result)'語句。