【问题标题】:Recursive map function on tree type树类型的递归映射函数
【发布时间】:2020-04-06 10:20:45
【问题描述】:

假设我有以下树类型: 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'))

不胜感激。

【问题讨论】:

  • 当定义看起来是一个列表时,为什么你称它为树类型?答案中的好提示:使用带有累加器的辅助函数。
  • 它是一种树类型,具有可变数量的子树。无论如何,我得到了答案。
  • 我明白了,所以sbs 就像subtrees(或children)。猜猜我习惯于使用更长名称的更大(更多人)代码库。

标签: functional-programming f#


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2011-07-24
    • 1970-01-01
    • 2021-08-13
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    • 2019-07-29
    • 2017-12-31
    • 2023-01-29
    相关资源
    最近更新 更多