(********************************************************************) (* OCaml code from the book ``Learn Programming with OCaml'' *) (* See https://usr.lmf.cnrs.fr/lpo/ *) (* *) (* Sylvain Conchon and Jean-Christophe Filliâtre *) (* Copyright 2025 Université Paris-Saclay and CNRS *) (* *) (* Openly licensed via CC BY SA 4.0 *) (* See https://creativecommons.org/licenses/by-sa/4.0/deed.en *) (********************************************************************) (* Program 66 on page 288 Persistent Priority Queues *) module Make(X: Ordered) : PersistentPriorityQueue with type elt = X.t = struct type elt = X.t type t = Empty Node of t * elt * t let empty = Empty let is_empty h = h = Empty let get_min = function Empty -> invalid_arg "get_min" Node (_, x, _) -> x let rec merge ha hb = match ha, hb with Empty, h h, Empty -> h Node (la, xa, ra), Node (lb, xb, rb) -> if X.compare xa xb <= 0 then Node (ra, xa, merge la hb) else Node (rb, xb, merge lb ha) let add x h = merge (Node (Empty, x, Empty)) h let remove_min = function Empty -> invalid_arg "remove_min" Node (a, _, b) -> merge a b end
This document was generated using caml2html