F#为列表

时间:2017-10-08 11:08:32

标签: list recursion f# pattern-matching

我正在学习F#。我已经为列表编写了自定义折叠函数(在StackOverflow上有帮助)。我现在正在尝试写回折函数说myOwnFoldBack。预期输出可能myOwnFoldBack (+) 0 [1; 2; 3 ]应返回6

这是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'

1 个答案:

答案 0 :(得分:2)

我想我终于明白了!

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