Function composition?

Q&A's, tips, howto's
Locked
jopython
Posts: 123
Joined: Tue Sep 14, 2010 3:08 pm

Function composition?

Post by jopython »

Is there a builtin compose function in newlisp?

Lutz
Posts: 5289
Joined: Thu Sep 26, 2002 4:45 pm
Location: Pasadena, California
Contact:

Re: Function composition?

Post by Lutz »

No compose function, but for sure other means to achieve similar. This link talks about function factories and the first-class nature of lambda expressions in newLISP:

http://www.newlisp.org/index.cgi?Closures

General info about differences to Common Lisp and Scheme:

http://www.newlisp.org/index.cgi?page=D ... ther_LISPs

Also, 'apply' has a reduce option:

http://www.newlisp.org/downloads/newlis ... html#apply

There is also a 'curry':

http://www.newlisp.org/downloads/newlis ... html#curry

Kazimir Majorinc
Posts: 388
Joined: Thu May 08, 2008 1:24 am
Location: Croatia
Contact:

Re: Function composition?

Post by Kazimir Majorinc »

I wrote the post "Composition of functions and macros" on my blog.

((composition 'f1 ... 'fn) _ _ _) = (f1 (f2 ... (fn _ _ _)))

If there was no significant change from February 2010, you should be able to cut and paste whole post in your editor and it should work.

jopython
Posts: 123
Joined: Tue Sep 14, 2010 3:08 pm

Re: Function composition?

Post by jopython »

Thank you , Kazimir.

William James
Posts: 58
Joined: Sat Jun 10, 2006 5:34 am

Re: Function composition?

Post by William James »

These seem to work.

Code: Select all

;; Compose two functions.  Both accept only 1 argument.
(define (atop f g)
  (expand (lambda (a) (f (g a))) 'f 'g))

;; Compose two functions.  The first to be called accepts
;; any number of arguments.
(define (atop* f g)
  (expand
    (lambda () (f (apply g (args))))
    'f 'g))
Thanks to Kazimir Majorinc for the idea of using expand.

Locked