Я реализовал приоритетную очередь, она работает хорошо. Ниже следует определение моего типа.Есть ли лучший способ создать такую очередь приоритетов?
type 'a t = | Leaf of ('a -> 'a -> int)
| Node of 'a * 'a t * 'a t * ('a -> 'a -> int)
Моя идея состоит в том, что дерево имеет функцию компаратора («а ->» а -> Int) и выдает «на т, что будет отсортирован компаратором.
Однако у меня есть компаратор на каждом Листе и Узде, и мне интересно, есть ли лучший способ сделать это.
В частности, учитывая дерево, я хочу иметь возможность легко получить доступ к его компаратору. И я не знаю, смогу ли я сделать это, не имея компаратора на каждом Узде и Листе моего дерева.
Благодаря
Функторы работают, но я думаю, что функция-компаратор уже указывает тип дерева, поэтому я бы предпочел не создавать функтор с типом и функцией. – octref
Я думаю, что может возникнуть проблема с вашим кодом. Во втором определении ваш pq требует, чтобы сначала определялось t, а в a t сначала нужно определить pq. Я не мог определить типы на вашем пути. – octref
Определения не должны быть взаимозависимыми. Это соизмеримо с его комментарием относительно использования другой функции компаратора, чем тот, который первоначально использовался для построения дерева. – nlucaroni