2011-10-23 7 views
4

ファンクションプログラミングは、私には新しく、別の関数の引数として関数を使用する方法を理解できないようです。最終値は期間の後の最終値を計算し、最終値2は2期間の後に計算されます。ハスケルへの関心の計算

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

「interest」と引数の数'finalvalue2'でそれに適用します。あなたは何が間違っているのを見ますか? – fuz

+1

ブラケット!または$ –

+1

@Nick: '$'は関数呼び出しが最後の引数ではないのでここでは機能しません。 – sepp2k

答えて

7
interest finalvalue capital rate rate 

あなたは関数である最初のものinterest 4と引数を、呼んでいます。 interestの最初の引数は関数ではなく、Floatでなければならないので、あなたはエラーメッセージを受け取ります。あなたはおそらく書くためのものは何

引数としてcapitalratefinalvalueを呼び出した結果である最初のうち2つのfloat、とinterestを呼び出す、interest (finalvalue capital rate) rateました。

+0

ありがとう!私はそのような角括弧を使用するはずだったのか分からなかった。問題が解決しました。 – 1nterference

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

括弧が必要ですか?それは3.23であるかのように

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 
             ^^^^^^^^^^ 

では、コンパイラは、interestの最初の引数であることを、それ自体で、finalvalueの著しい使用を取っているが、もちろんそれは作ることができませんそれの感覚。 (エラー・ステートメントに記載されている正確な位置を見るとよいでしょう。この場合はマークした場所を指しています)