2016-11-04 7 views
1

問題は、以下の通りである。この無限リストはどのように計算されますか?

あなたは$ 100を開始し、 は毎年配合5%の利息を、支払いを受けると仮定すると、毎年持っているお金の量 の無限のリストであるHaskellの変数ドルを定義します。 (インフレ、デフレを無視して、税金、救済措置、経済崩壊の可能性、その他の詳細については、 を参照してください)。ドルは、[100.0,105.0,110.25、 ...]と等しいはずです。

私のソリューションは、次のようであり、それは動作します:

dollars::[Double] 
dollars = 100.0 : [1.05 * x | x<- dollars ] 

問題は、私はトラブルリストは実質的に計算する方法を理解しているということです。

dollars= 100.0 : [1.05 * x | x<- dollars ] 
= 100.0 : [1.05 * x | x<- 100.0 : [1.05 * x | x<- dollars ] ] 
= 100.0 : (1.05 * 100.0) : [1.05 * x | x<- [1.05 * x | x<- dollars ] ] 
= 100.0 : 105.0 : [1.05 * x | x<- [1.05 * x | x<- dollars ] ] 
= 100.0 : 105.0 : [1.05 * x | x<- [1.05 * x | x<- 100.0 : [1.05 * x | x<- dollars ] ] ] 
= 100.0 : 105.0 : [1.05 * x | x<- 105.0:[1.05 * x | x<-[1.05 * x | x<- dollars ] ] ] 
= 100.0 : 105.0 : 110.25 :[1.05 * x | x<-[1.05 * x | x<-[1.05 * x | x<- dollars ] ] ] 

など

それはそれが計算される方法ですか?そうでない場合はどう?はいの場合、これらの種類の計算を概念化する簡単な方法がありますか?

答えて

0

これは多かれ少なかれ正しいです。どの順序で置換が行われるかは、結果を出力するコードによって決まります。 2行と3行の置換は入れ替えることができます。

2

あなたはかなり正しいです。リストの理解度を関数呼び出しに甘やかさないと助けになるかもしれません。相当

dollars = 100.0 : map (* 1.05) dollars 

ですこれは、その後

= 100.0 : let dollars1 = 100 * 1.05 : map (*1.05) dollars1 in dollars1 
= 100.0 : 105.0 : let dollars2 = 105 * 1.05 : map (*1.05) dollars2 in dollars2 

などと評価されました。私はdollars1dollars2を識別子として使用していますが、実際には存在しません。

関連する問題