type t={x:float         ;y:
                            float} ;;let      p=print_string
                       ;;let r(x,y)=Random.    float  y+. x;;
            let     q(**)x   =p   " ";print_float    (*    *)
            x  ;; let    i n u   ya s h a       ={x=(n     +.
           (cos(**)ya)     *.                       s*.    a.x)
           -.(                                         sin  ya)*.
          a.y                                         *.h;y=(s  *.
         a.                                            x)*.(sin  ya)
       +.( cos                                              ya)*.  a.
     y*. h+.              u}                                    ;;  let
   s(c )=q             c .x                                      ;q   c.
 y;; let           o  =("}    def                                 ")   ;;
  p("             "^ " /ct    {" (*  \,                        ^_^ v    \\
 *)   ^"         curveto"     ^"  }"  ^"                        def"^   (*
*)   ((*        AP LL  TW     IK  :)   *)                        "/e"    (*
\\  osu        wa  ri  !      *)   ^    "ndp                      "(*     v
(* =*)        *)   ^" ")      ^"   {"^   "closepath           "^  (*>     E!
2002/1    *)  (" fill ")^     (o   )^"/n   {newpath"^  ("}    def ")       ^
(**)"    /s{  setrgbcolor      n"   ^   (o) ^"/m    {moveto    "^(*        *)
o^" /c   {ct   endp "^o);;     Random.  self_init(    );;(**)  let          y
(x   )= match   x with k::a     :: g::o:: m::e        ::  (* SY!            !
*)    [] ->s(   e);p(" " ^"m"   );   s(k  );s(a       );      s(            g)
       ;p(" ct"  );s(   o); s(m  );        s(e        );      p"             c
         ";   |_->();;  let   rec(*\                  *)       z             x
          =      if x>   00      then                  (       (*            ;;
                     *)z                               (x       -1  );       q(
                     (r(                              0.5        ,(  0.5     ))
                     ));q              (r            ((0.         ), 0.1)    );
                     q  (r        (0.,(            0.1  ))         );p" s"   ;(
                    y(   List                   .map     (          i(r  (( 72.
                   ),     468.(*              *))        )(          r((  72.),
                 648.     ))  (r(0.       ,6.2           ))            (r  (12.
              ,34.        )       )(r(12.0,               24.           (*  *))
            ))[          {y                                =(            0.  -.
           5.           );                                  x            =(
           4.          )}                                   ;{           x=
            (         4.                                     );         y=
            5.        };                                     {x         =
            0.       ;y                                      =(        6.
             )}      ;{                                      x        =(
              6.     );                                     y=      5.}
               ;{    y=                                    0.      -.
                (5.  );                                   x=     6.}
                 ;{   x=                                 0.     ;y
                  =( -6.                                )}    ])
                    ));;                               z(  -3+
                      19+                             Random
                       .                             int 16
                                                    );;

  SAMPLE