2011-10-23 49 views
4

函數編程對我來說是非常新的,似乎無法理解如何使用函數作爲另一個函數的參數。 finalvalue應該計算一段時間後的最終值,以及2個時間段後的finalvalue2。計算Haskell的興趣

interest :: Float -> Float -> Float 
interest capital rate = capital * rate * 0.01 

finalvalue :: Float -> Float -> Float 
finalvalue capital rate = capital + interest capital rate 

finalvalue2 :: Float -> Float -> Float 
finalvalue2 capital rate = finalvalue capital rate + interest finalvalue capital rate rate 

我得到這個:

Couldn't match expected type `Float' 
     against inferred type `Float -> Float -> Float' 
In the first argument of `interest', namely `finalvalue' 
In the second argument of `(+)', namely 
    `interest finalvalue capital rate rate' 
In the expression: 
     finalvalue capital rate + interest finalvalue capital rate rate 

我敢肯定,我錯過了一個基本點在這裏,但我無法找出它是什麼。

+1

計算您聲明的「興趣」參數數量以及參數個數適用於'finalvalue2'。你看到有什麼問題嗎? – fuz

+1

括號!或者$ –

+1

@Nick:'$'在這裏不起作用,因爲函數調用不是最後一個參數。 – sepp2k

回答

7
interest finalvalue capital rate rate 

這裏你打電話interest有四個參數,其中第一個是一個函數。由於interest的第一個參數需要是浮點數,而不是函數,所以您會收到錯誤消息。

什麼你可能打算寫是interest (finalvalue capital rate) rate,要求interest有兩個花車,其中第一個是調用finalvaluecapitalrate作爲參數的結果。

+0

非常感謝!我不知道我應該使用那樣的括號。問題解決了。 – 1nterference

1
finalvalue2    :: Float -> Float -> Float 
finalvalue2 capital rate = finalvalue capital rate + interest (finalvalue capital rate) rate 
4

你只需要一些括號,不是嗎?

finalvalue2 :: Float -> Float -> Float 
finalvalue2 capital rate = 
    finalvalue capital rate + interest (finalvalue capital rate) rate 

finalvalue2 :: Float -> Float -> Float 
finalvalue2 capital rate = 
    finalvalue capital rate + interest finalvalue capital rate rate 
             ^^^^^^^^^^ 

編譯器正在標記使用的finalvalue,其本身是的interest第一個參數,就好像它是3.23,但當然不能讓那種感覺。 (這是一個好主意,請查看錯誤聲明中提到的確切位置,在這種情況下,該錯誤聲明指向我標記的位置。)