Когда я программирую функции на деревьях в OCaml, я всегда сталкиваюсь с этой повторяющейся проблемой: когда я добираюсь до листьев дерева, я хотел бы ничего не возвращать, но все же хочу, чтобы моя программа продолжалась.
Чтобы быть более ясным, иногда у меня есть упражнения, которые просят найти конкретный узел n , поэтому я могу сделать следующее: (для простоты я делаю это здесь на двоичных деревьях):
let rec find_node n tree = match tree with
|Nil -> (* I don't want my program to stop here but then what can I return ?*)
|Node(l, k, r) as t when k =n -> t
|Node(l, _, r) -> find_node n l; find_node n r
Я использую следующее представление бинарных деревьев:
type b_tree = Nil | Node of b_tree * int * b_tree
В общем, я бы хотел, чтобы моя программа продолжала работать до тех пор, пока не найдет то, что хочет, но, поскольку у функции в OCaml есть только один тип возврата, я не могу сделать что-то вроде:
let rec find_node n tree = match tree with
|Nil -> () (*returning unit type here*)
|Node(l, k, r) as t when k =n -> t
|Node(l, _, r) -> find_node n l; find_node n r
Так как я могу сказать "ничего не делать" в случае с образцом?
Спасибо!