t3x.org / nss / curry.html

(Nils' Scheme Snippets)

 
Paren matching: ON  |  Category: syntax  |  Overview  |  Scheme Books  |  License
 

(curry (lambda (symbol ...) expr ...)) => procedure
(uncurry procedure expr ...) => form

 
Purpose
Currying and uncurrying procedures. Note: curry can only be applied to lambda.
 
Arguments
curry: (lambda ...) procedure to curry
uncurry: procedure curried procedure
 
Example
(curry (lambda (x y) (+ x y)))
  => procedure ; (lambda (x) (lambda (y) (+ x y)))
(uncurry (lambda (x) (lambda (y) (+ x y))) 5 7)
  => 12
(define-syntax curry
  (syntax-rules ()
    ((_ (lambda () . expr))
       (begin . expr))
    ((_ (lambda (h . t) . expr))
       (lambda (h) (curry (lambda t . expr))))))

(define-syntax uncurry
  (syntax-rules ()
    ((_ fn arg)
       (fn arg))
    ((_ fn arg . args)
       (uncurry (fn arg) . args))))

Copyright (C) 2007 Nils M Holm <nmh @ t3x . org>