Oh sorry I see you export curry too, so you can have anonymous ones.

On Wed, May 27, 2009 at 5:24 PM, Ramana Kumar <[email protected]> wrote:
> anonymous curried procedures?
>
> also, is your curry better than my case-lambda approach? yours is
> about the same amount of code, and possibly more efficient... I don't
> know
>
> On Wed, May 27, 2009 at 5:20 PM, Derick Eddington
> <[email protected]> wrote:
>> 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