home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / gofer230.zip / Progs / Gofer / Demos / Lamvar / lnexamples < prev    next >
Text File  |  1994-06-23  |  2KB  |  63 lines

  1. --
  2. -- Examples for use with LambdaNu
  3. --
  4.  
  5. imap f xs        =  begin
  6.                          (new 
  7.                (\t ->
  8.                  assign t xs >>
  9.                  let loop = deref t >>= \ys ->
  10.                             case ys of 
  11.                           (y:ys') -> out (f y :) >>
  12.                                  assign t ys' >>
  13.                              loop
  14.                           [] -> outConst []
  15.                              in loop))
  16.  
  17. imap' f xs  = newvar      >>= \t ->
  18.               assign t xs >>
  19.               let loop = t ? \ys ->
  20.                          case ys of (z:zs) -> out (f z :) >>
  21.                                               assign t zs >>
  22.                                               loop
  23.                                     []     -> outConst []
  24.              in  loop
  25.  
  26.  
  27. ones = 1:ones
  28.                      
  29. test1 = imap (+1) [1,2,3]
  30. test2 = imap (+1) ones
  31.  
  32. funny x = begin (new (\t -> assign t x >>
  33.                             deref t    >>= \x' ->
  34.                             outConst x'))
  35.  
  36. funny' x y = begin (new (\t ->
  37.                    (new (\s -> assign t x >>
  38.                                assign s y >>
  39.                                deref t    >>= \x' ->
  40.                                deref s    >>= \y' ->
  41.                                outConst (x',y')))))
  42.  
  43. double xs = begin
  44.               (new
  45.                 (\t -> assign t xs >>
  46.                        let loop = deref t >>= \zs ->
  47.                                   case zs of
  48.                                     (y:ys) -> out (\zs -> y:y:zs) >>
  49.                                               assign t ys         >>
  50.                                               loop
  51.                                     []     -> out (const [])
  52.                        in  loop))
  53.  
  54.  
  55. double' xs = begin
  56.               (let loop (y:ys) = out (\zs -> y:y:zs) >> loop ys
  57.                    loop []     = out (const [])
  58.                in  loop xs)
  59.  
  60.  
  61. double'' (y:ys) = y : y : double'' ys
  62. double'' []     = []
  63.