как проверить, правильно ли сформирован путь с помощью FsCheck в FSharp - PullRequest
0 голосов
/ 22 ноября 2018

Я изо всех сил пытаюсь получить ответ на этот вопрос:

Определите функцию functionWF и functionPath, которая принимает FsTree и возвращает логическое значение, которое проверяет, правильно ли заданное дерево сформировано как файловая система.и является ли путь (представленный в виде списка строк) правильно сформированным.

Правильно сформированная файловая система не может иметь идентичные пути, ведущие к различным узлам в дереве.

Правильно сформированныйпуть не может содержать узлы с пустыми именами.

ниже тип FsTree = Node of (string * FsTree) list

и ниже пример FsTree:

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

1 Ответ

0 голосов
/ 13 декабря 2018

A 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 [])]
...