树型的递归映射函数

时间:2019-12-13 00:17:38

标签: functional-programming f#

假设我具有以下树类型: type T<'a> = N of 'a * T<'a> list

如何为它声明一个递归映射函数?目前我有这个,但这是一个无限循环:

let rec map f (N(a,sbs)) = 
    match sbs with
    | [] -> N(f a,[])
    | sbs' -> map f (N(a,sbs'))

我希望得到一个提示。

1 个答案:

答案 0 :(得分:0)

这是一个提示。这是一个尾递归映射函数。

    let mapTR f l =
        let rec loop acc = function
            | [] -> List.rev acc
            | x::xs -> loop (f x::acc) xs
        loop [] l