(********************************************************************) (* 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 26 on page 185 Basic Operations on Ropes *) module Make(X : STRING) : (ROPE with module S = X) = struct module S = X type char = S.char type t = Str of S.t * int * int App of t * t * int let empty = Str (S.empty, 0, 0) let length = function Str (_,_,n) App (_,_,n) -> n let of_string s = Str (s, 0, S.length s) let make n c = of_string (S.make n c) let rec unsafe_get t i = match t with Str (s, ofs, _) -> S.get s (ofs + i) App (t1, t2, _) -> let n1 = length t1 in if i < n1 then unsafe_get t1 i else unsafe_get t2 (i - n1) let get t i = if i < 0 || i >= length t then invalid_arg "get"; unsafe_get t i
This document was generated using caml2html