如何使用FSharp中的FsCheck检查路径是否格式正确

时间:2018-11-21 23:43:17

标签: f# nuget-package fscheck

我正在努力寻找答案:

定义一个函数functionWFfunctionPath,该函数采用FsTree并返回一个布尔值,该布尔值检查给定的树是否格式正确,如文件系统,以及路径(表示为字符串列表)格式正确。

格式正确的文件系统不能具有通向树中不同节点的相同路径。

格式正确的路径不能包含名称为空的节点。

使用类型FsTree = Node of (string * FsTree) list

下面是FsTree的示例:

fsT = [Node ("f1", [Node ("f2", [])]); [Node ("f3", [])]]

1 个答案:

答案 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 [])]