我正在努力寻找答案:
定义一个函数functionWF
和functionPath
,该函数采用FsTree并返回一个布尔值,该布尔值检查给定的树是否格式正确,如文件系统,以及路径(表示为字符串列表)格式正确。
格式正确的文件系统不能具有通向树中不同节点的相同路径。
格式正确的路径不能包含名称为空的节点。
使用类型FsTree = Node of (string * FsTree) list
下面是FsTree的示例:
fsT = [Node ("f1", [Node ("f2", [])]); [Node ("f3", [])]]
答案 0 :(得分:1)
如果Node
包含多个同名元素,或者包含的任何子树都是这种情况,则格式错误。具体来说,Node []
的格式正确。这些概念可能是递归函数functionWF
的情况:
let rec functionWF (tree : FsTree) : bool =
match tree with
| Node [] -> true
| Node list ->
let strings = List.map fst list
let trees = List.map snd list
let namesOk = allElementsUnique strings
let subtreeOk state tree = state && (functionWF tree)
List.fold subtreeOk namesOk trees
其中allElementsUnique
是确保列表中没有重复元素的函数。
我不明白您说functionPath
应该做什么。
PS。您的FsTree
示例无效,应该在列表之外包含Node
:
let fsT = Node [("f1", Node [("f2", Node [])]); ("f3", Node [])]