That'll do the trick. Just to rearrange a bit, the following seems to come closest in spirit to the function composition operator:

     CADR = {Compose CAR CDR}

Whereas you don't get the sugar of defining a new operator, you do get the same expressive power with the added bonus of consistency.

Thanks!
Chris Rathman

Kevin Glynn wrote:
Chris Rathman writes:
> More of curiosity question at the moment as I attempt to translate SICP, > but does Oz have he ability to compose functions in the manner of > composition operator? Taking a simple ML example: > > val car = hd
 >       val cdr = tl
 >       val cadr = car o cdr
> > And extrapolating that idea to my pseudo Oz code, I'd have something > along the lines of: > > fun {CAR L} L.1 end
 >       fun {CDR L} L.2 end
 >       fun {CADR L} CAR o CDR end
> > To relate the question to CTM, the book gives a Haskell example in > section 4.7.2 that has an expression within the sqrt function: > > dropWhile (not . gooEnough) > > where the dot operator in Haskell does effectively the same that the o > operator does above. >
Hi Chris,

There is no compose operator in Mozart/Oz and, unlike Haskell,  you
can't add your own new operators.  However,  compose is just an
ordinary higher orderfunction, so:

   fun {Compose F G}
      fun {$ X}
         {F {G X}}
      end
   end
fun {CAR L} L.1 end
   fun {CDR L} L.2 end
   fun {CADR L} {{Compose CAR CDR} L} end

and
{List.dropWhile [1 2 3] {Compose Not IsEven}}

It is certainly a bit noisier than ML or Haskell, but the effect is
the same.

cheers
k







_________________________________________________________________________________
mozart-users mailing list                               
[email protected]
http://www.mozart-oz.org/mailman/listinfo/mozart-users

Reply via email to