2017-10-08 8 views
0

私はF#を学んでいます。私はリストのためのカスタム折り畳み関数を書いています(StackOverflowのヘルプを参照)。私は今、myOwnFoldBackというフォールドバック関数を書こうとしています。期待される出力はを返すべきmyOwnFoldBack (+) 0 [1; 2; 3 ]であるかもしれません。ここでF#リストのカスタム折り返し機能を書く

はmyOwnFold

let rec myOwnFoldf s0 = 
    function 
    | [] -> s0 
    | x::tail -> myOwnFoldf (f s0 x) tail 

これは正常に動作のために私のコードです。ここで がmyOwnFoldBack

let rec myOwnFoldBack f s0 = 
    function 
    | [] -> 0 
    | x::tail -> x f (myOwnFoldBackf tail) 

ためのコードである私が手にエラーがある:

Type mismatch. Expecting a 
    'a  
but given a 
    ('b -> 'a -> int) list -> int  
The resulting type would be infinite when unifying ''a' and '('b -> 'a -> int) list -> int' 
+0

あなたは小さなタイプミス、二 'myOwnFoldBack'は' myOwnFoldBackf' –

+0

を持っているように、私はそれとは別に、いくつかのより多くの問題があると思い見えます。 –

+0

もう少しあるようです。 'myOwnFoldBackf'は空リストの場合には' s0'のisnteadを返しますが、 'f'に' x'を適用すると 's0'を再帰呼び出しに渡すことはありません... –

答えて

2

私はついにそれを考え出したと思います!

let rec myOwnFoldBack f s0 = 
    function 
    | [] -> s0 
    | x::tail -> f x (myOwnFoldBack f s0 tail) 
関連する問題