Есть ли приоритетная реализация очереди в ATS?
Мне нужно сделать какой-то приоритетный поиск. Может ли кто-нибудь указать мне на реализацию приоритетной очереди в ATS?
2 ответа
Вы можете легко основать приоритетную очередь на биномиальной куче.
В ATS есть две реализации биномиальных куч. Вот несколько вариантов использования:
https://github.com/githwxi/ATS-Postiats/blob/master/doc/EXAMPLE/ATSLIB/libats_linheap_binomial.dats
https://github.com/githwxi/ATS-Postiats/blob/master/doc/EXAMPLE/ATSLIB/libats_linheap_binomial2.dats
Я придумал небезопасную max-кучу на основе C (основанную на чьем-то другом). Я думаю, что это показывает, что взаимодействие с кодом C в ATS, хотя в целом небезопасно, сделать очень просто.
Смотрите полный образец на Glot.io
РЕДАКТИРОВАТЬ: вот еще одна реализация, на этот раз в ATS. Хотя это немного хлопотно (слишком много индексов в типе!), Но ключевая особенность этого кода в том, что он безопасен по типу и в то же время очень близок к типичной реализации C с точки зрения поведения во время выполнения.,