2016-04-30 10 views
2

現在のタイムステップが前のタイムステップの解(状態)を必要とするF#の反復アルゴリズムを評価しています。F#マッピング中に以前に評価された解(状態)を使用する

let answer = List.map (fun x -> x + previousAnswer) 0 someData 

私がしたいことは折り目が、以前のソリューション(の状態)に似ています:最初の繰り返しの場合、初期条件は、これはに類似しただろうつまり0

に設定可能でなければなりません蓄積されるのではなく、単にアクセス可能である。 このような操作を行う正しい機能的な方法は何ですか?

ありがとうございます!

+0

[ '

let answers = List.scan (fun previousAnswer x -> x + previousAnswer) 0 someData 

(それは0 someData、ないsomeData 0する必要がありますまた、あなたの例では、あなたが反転しmap引数を持っていることに注意してください)。そして実際、F#の標準ライブラリは、すべての基本的なコレクションのためのscanの実装を提供しませんSeq.unfold'](https://msdn.microsoft.com/en-us/library/ee340363.aspx)? –

+0

[Seq.reduce](https://msdn.microsoft.com/en-us/library/ee353740.aspx)? –

+0

'List.map'が正しく初期化されないのはなぜですか?関数 '(fun x - > x + previousAnswer)'と開始リスト 'List.map'のシグネチャは'( 'T - >' U) - > 'T list - > 'U list' 'someData 0'ではなく' T list'ですか? –

答えて

4

foldすべての中間値を新しいシーケンスとして返すのは伝統的にはscanです。 -

+0

非常にありがとう、追加の入力と私のマップは非常に明確ではなかった: – rbonallo

+0

私の答えはあなたを助けた場合、それを受け入れると思いますか? –

関連する問題