Processing with SML
  
  
    val start = ()
val white = (255, 255, 255)
fun setup p = (background p white;
               frameRate p 60)
fun draw p () =
  let val (w,h) = (real (width p), real (height p))
      val (mx,my) = (real (mouseX p), real (mouseY p))
      val _ = line p (0.0,0.0) (mx,my)
  in ()
  end
val _ = run setup draw start
 
 
val start = (100.0, 100.0, 10.0, 13.0)
val red = (255,0,0)
val white = (255, 255, 255)
fun setup p = (background p white;
               frameRate p 60)
fun draw p (x,y, xspeed,yspeed) =
  let val _ = background p red;
      val _ = ellipse p (x, y) (40.0, 40.0)
      val (w,h) = (width p, height p)
      val newxspeed = if x > real w orelse x < 0.0
                      then ~ xspeed
                      else xspeed
      val newyspeed = if y > real h orelse y < 0.0
                      then ~ yspeed
                      else yspeed
  in (x + newxspeed, y + newyspeed,
      newxspeed, newyspeed)
  end
val _ = run setup draw start
val start = ()
val white = (255, 255, 255)
fun setup p = (background p white;
               frameRate p 60)
fun draw p () =
  let val (w,h) = (real (width p), real (height p))
      val (mx,my) = (real (mouseX p), real (mouseY p))
      val _ = line p (0.0,0.0) (mx,my)
      val _ = line p (w,  0.0) (mx,my)
      val _ = line p (0.0,h)   (mx,my)
      val _ = line p (w,  h)   (mx,my)
  in ()
  end
val _ = run setup draw start
val start = Random.newgen ()
val white = (255, 255, 255)
fun setup p = (background p white;
               frameRate p 60)
fun draw p rng =
  let fun randomColour rng =
          let val (r,g,b) = (255.0*Random.random rng,
                             255.0*Random.random rng,
                             255.0*Random.random rng)
          in (floor r, floor g, floor b) end
      val (w,h) = (width p, height p)
      val (x,y) = (real w*Random.random rng, real h*Random.random rng)
      val s = 100.0*Random.random rng
      val _ = fill p (randomColour rng)
      val _ = ellipse p (x, y) (s,s)
  in rng
  end
val _ = run setup draw start
val start = (0, 0.0,10000.0)
val white = (255, 255, 255)
fun setup p = (background p white;
               frameRate p 60)
fun draw p (r,tx,ty) =
  let val (w,h) = (real (width p), real (height p))
      val (x,y) = (noise1D p tx, noise1D p ty)
      val _ = stroke p (r,0,0)
      val _ = line p (0.0,0.0) (x*w,y*h)
      val _ = line p (w,  0.0) (x*w,y*h)
      val _ = line p (0.0,h)   (x*w,y*h)
      val _ = line p (w,  h)   (x*w,y*h)
  in ((r + 1) mod 255,
      tx+0.01, ty+0.01)
  end
val _ = run setup draw start
(* Ported from Processing example by Casey Reas and Ben Fry *)
(* Euclidean distance *)
fun distance (x1,y1) (x2,y2) =
      Math.sqrt (Math.pow (x2 - x1, 2.0) +
                 Math.pow (y2 - y1, 2.0))
val nCircles = 10
val stepSize = 400 div (nCircles-1)
val max_dist = distance (0.0, 0.0) (400.0, 400.0)
(* No state *)
val start = ()
fun setup p = noStroke p;
fun drawCircles p =
  let val mpos = (real (mouseX p), real (mouseY p))
      fun drawCircle (i,j) =
          let val size = distance mpos (i, j) / max_dist * 120.0
          in
              ellipse p (i, j) (size, size)
          end
  in
      List.tabulate (nCircles, fn i =>
        List.tabulate (nCircles, fn j =>
          drawCircle (real (i*stepSize),
                      real (j*stepSize))))
  end
fun draw p () =
    (background p (51,51,51);
     drawCircles p;
     ())
val _ = run setup draw start