Page 1 of 1

Function composition?

Posted: Sun Dec 18, 2011 2:52 pm
by jopython
Is there a builtin compose function in newlisp?

Re: Function composition?

Posted: Mon Dec 19, 2011 6:09 pm
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

Re: Function composition?

Posted: Tue Dec 20, 2011 9:23 pm
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.

Re: Function composition?

Posted: Wed Dec 21, 2011 9:21 pm
by jopython
Thank you , Kazimir.

Re: Function composition?

Posted: Tue Mar 06, 2012 6:52 am
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.