将自定义类型求和,就好像它是正常列表F#

时间:2013-10-25 04:48:11

标签: list recursion types f# sum

我正在尝试构建一个函数,该函数对可以存储在我的特殊类型中的值列表进行求和。

我的类型看起来像这样

  

type intnest = INT的INT |内容列表的列表;;

我正在尝试使用以下代码进行求和(我希望addup返回类型intnest

let rec regularsum list =
   match list with
   | head :: tail -> head + regularsum tail
   | [] -> 0

let addup lt = 
    match lt with
    | INT -> lt
    | LIST ->regularsum lt

我的自定义类型可以对其元素求和吗?如果是这样,我应该如何更改我的代码来实现这一目标?或者接下来应该尝试什么?

1 个答案:

答案 0 :(得分:2)

所以最好的方法是使用更高阶函数

let rec addup l =
    match l with
    |INT(_) -> l
    |LIST(li) -> 
        INT(
             li 
             |> List.map (addup) 
             |> List.fold (fun s t -> match t with |INT(a) -> s+a | _ -> failwith "bad error") 0)