(* Trace un motif de manière générique, * à partir d'une fonction qui indique s'il faut tracer le caractère ou non. *) let trace_surface f haut larg = for y = 1 to haut do for x = 1 to larg do print_string (if f x y then "#" else " ") done ; print_endline "" done (* Cela suffit pour définir chaque fonction demandée en une ligne. *) let tracer_ligne long = trace_surface (fun _ _ -> true) 1 long let tracer_rectangle haut larg = trace_surface (fun x y -> x = 1 || y = 1 || x = larg || y = haut) haut larg let tracer_quadrillage = trace_surface (fun x y -> x mod 2 = 1 || y mod 2 = 1) let tracer_damier = trace_surface (fun x y -> (x + y) mod 2 = 0) let tracer_gros_damier = trace_surface (fun x y -> ((x-1) / 2 + (y-1) / 2) mod 2 = 0) (* Tests *) let rec space n = if n = 0 then () else (print_endline "" ; space (n-1)) let () = tracer_ligne 5 ; space 3 ; tracer_rectangle 12 8 ; space 3 ; tracer_quadrillage 11 15 ; space 3 ; tracer_damier 9 11 ; space 3 ; tracer_gros_damier 12 18 ; ()