(********************************************************************) (* 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 13 on page 98 Logo Turtle *) module type ANGLE = sig type t val of_degrees: float -> t val add: t -> t -> t val cos: t -> float val sin: t -> float end module Turtle(A: ANGLE) = struct let draw = ref true let pen_down () = draw := true let pen_up () = draw := false let angle = ref (A.of_degrees 0.) let rotate_left d = angle := A.add !angle (A.of_degrees d) let rotate_right d = rotate_left (-. d) open Graphics let tx = ref 400. let ty = ref 300. let () = open_graph " 800x600"; set_line_width 2; moveto (truncate !tx) (truncate !ty) let advance d = tx := !tx +. d *. A.cos !angle; ty := !ty +. d *. A.sin !angle; if !draw then lineto (truncate !tx) (truncate !ty) else moveto (truncate !tx) (truncate !ty) end
This document was generated using caml2html