On Tue, 2009-05-26 at 18:36 -0500, Eduardo Cavazos wrote:
> Hello,
> 
> Here's a simple procedure:
> 
> (define (subtract-from n)
>     (lambda (m)
>       (- n m)))
> 
> subtract-from is essentially a two parameter '-' which is curried, left
> to right.
> 
> I don't recall a traditional/defacto way to express this. Any ideas or
> suggestions?

I have my (xitomatl curry) library (pasted below) which supports "rest"
arguments and applying any number of arguments at a time:

> (import (xitomatl curry))
> (define/curry (f a b c . r)
    (apply + a b c r))
> (f 1 2 3 4)
10
> ((f 1 2) 3 4 5 6)
21
> (((f 1) 2) 3)
6
> 

I just made it when I was bored, so now I'm wondering if I could enhance
it in any ways...?

-- 
: Derick
----------------------------------------------------------------


(library (xitomatl curry)
  (export
    define/curry
    curry)
  (import
    (rnrs)
    (only (xitomatl define) define/?)
    (only (xitomatl predicates) positive-integer?))
  
  (define-syntax define/curry
    (lambda (stx)
      (syntax-case stx ()
        [(_ (name a ... . r) . body)
         (and (identifier? #'name)
              (positive? (length #'(a ...))))
         #`(define name
             (curry 
               (lambda (a ... . r) . body)
               #,(length #'(a ...))))])))
  
  (define/? (curry proc [n positive-integer?])
    (lambda args
      (let ([len (length args)])
        (if (>= len n)
          (apply proc args)
          (curry 
            (lambda more (apply proc (append args more))) 
            (- n len))))))
)


Reply via email to