Тестовый пример для нахождения высоты бинарного дерева

Я написал функцию, которая находит высоту бинарного дерева (т.е. количество узлов на самом длинном пути от корня до листа).

let rec height (t: 'a tree) : int =
begin match t with
| Empty -> 0
| Node (l, v, r) -> 1 + max (height 1) (height r)
end

Я считаю, что моя функция верна, но синтаксическая ошибка, которая возникает при запуске моего теста, говорит: «Эта функция применяется к слишком большому количеству аргументов; возможно, вы забыли «;».

Это мой тестовый случай

let test () : bool =
height Node(Node(Empty, 1, Empty), 3, Node(Empty, 2, Node(Empty, 4, Empty))) = 3
;; run_test "Node(Node(Empty, 1, Empty), 3, Node(Empty, 2, Node(Empty, 4, Empty)))" test

Что не так с моим тестовым случаем?

Спасибо!


person user1993381    schedule 02.02.2013    source источник


Ответы (1)


Рассмотрим выражение

height Node (Empty, 0, Empty)

В OCaml соседние значения указывают на применение функции, которая является левоассоциативной. Итак, это то же самое, что:

(height Node) (Empty, 0, Empty)

Будет работать следующее:

height (Node (Empty, 0, Empty))

Другими словами, вам просто нужно добавить скобки.

person Jeffrey Scofield    schedule 02.02.2013