F# 编写一个函数从列表中构建树
如何编写函数从F#中的列表构建树F# 编写一个函数从列表中构建树,f#,F#,如何编写函数从F#中的列表构建树 如果从左到右读取树的标签进行写入,则它们的顺序应与原始列表的顺序相同。以下是一些开始的提示。根据您对树的定义: type Tree = | Leaf of int | Node of (Tree * Tree) 您希望定义一个函数,该函数从整数列表构造一个树值。将问题分解为更小的部分是一种很好的做法,因此,您可以从一个简单的函数开始添加单个元素,而不是直接定义fromList函数。要做到这一点,您只需考虑两种情况,即两种可能的树形状,因此已
如果从左到右读取树的标签进行写入,则它们的顺序应与原始列表的顺序相同。以下是一些开始的提示。根据您对
树的定义
:
type Tree =
| Leaf of int
| Node of (Tree * Tree)
您希望定义一个函数,该函数从整数列表构造一个树
值。将问题分解为更小的部分是一种很好的做法,因此,您可以从一个简单的函数开始添加单个元素,而不是直接定义fromList函数。要做到这一点,您只需考虑两种情况,即两种可能的树形状,因此已经给出了这样的函数的存根:
let addInt n tree =
match tree with
| Leaf x -> ??
| Node (t1,t2) -> ??
一旦你找到了一个合理的定义,你就可以继续思考如何定义对列表进行操作的函数,并重用addInt
。这一次,您需要匹配列表的基本情况:
let rec addMany xs tree =
match xs with
| [] -> ??
| x :: xs -> ??
一旦您习惯使用显式递归解决此类问题,您可以查看
列表。折叠以简化您的解决方案。树的标签是什么?如果你只想保持列表的顺序,为什么你需要一个树状结构?真的吗?在不到两天的时间里问同样的问题?
let rec addMany xs tree =
match xs with
| [] -> ??
| x :: xs -> ??