;; lambda-c.scm - (c) rohan drape, 2000-2007 (module lambda-c scheme/base (require (only-in srfi/23 error)) (provide lambda-c define-c) (define (curry f n e) (lambda a (let ((n* (length a))) (cond ((> n* n) (error 'curry "too many arguments" f n e a n*)) ((= n* n) (apply f (append e a))) ((< n* n) (curry f (- n n*) (append e a))))))) (define-syntax lambda-c (syntax-rules () ((_ a e) (curry (lambda a e) (length (quote a)) (list))))) (define-syntax define-c (syntax-rules () ((_ (n a ...) e) (define n (lambda-c (a ...) e))))) )