guile-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 2/6] ELF refactor and consequent linker simplifications


From: Ludovic Courtès
Subject: Re: [PATCH 2/6] ELF refactor and consequent linker simplifications
Date: Thu, 23 May 2013 12:27:12 +0200
User-agent: Gnus/5.130007 (Ma Gnus v0.7) Emacs/24.3 (gnu/linux)

Andy Wingo <address@hidden> skribis:

> On Wed 22 May 2013 22:44, address@hidden (Ludovic Courtès) writes:
>
>>> -(define (fold2 proc ls s0 s1)
>>> -  (let lp ((ls ls) (s0 s0) (s1 s1))
>>> -    (if (null? ls)
>>> -        (values s0 s1)
>>> -        (receive (s0 s1) (proc (car ls) s0 s1)
>>> -          (lp (cdr ls) s0 s1)))))
>>> -
>>>  (define (fold4 proc ls s0 s1 s2 s3)
>>>    (let lp ((ls ls) (s0 s0) (s1 s1) (s2 s2) (s3 s3))
>>>      (if (null? ls)
>>> @@ -236,15 +231,9 @@
>>>          (receive (s0 s1 s2 s3) (proc (car ls) s0 s1 s2 s3)
>>>            (lp (cdr ls) s0 s1 s2 s3)))))
>>>  
>>> -(define (fold5 proc ls s0 s1 s2 s3 s4)
>>> -  (let lp ((ls ls) (s0 s0) (s1 s1) (s2 s2) (s3 s3) (s4 s4))
>>> -    (if (null? ls)
>>> -        (values s0 s1 s2 s3 s4)
>>> -        (receive (s0 s1 s2 s3 s4) (proc (car ls) s0 s1 s2 s3 s4)
>>> -          (lp (cdr ls) s0 s1 s2 s3 s4)))))
>>
>> What about moving these to a helper module eventually?
>
> Sure.  Or maybe a fold-values that takes a variable number of arguments and
> inlines itself...
>
>   (define-syntax fold-values
>     (lambda (x)
>       (syntax-case x ()
>         ((_ proc list seed ...)
>          (with-syntax (((s ...) (generate-temporaries #'(seed ...))))
>            #'(let ((p proc))
>                (let lp ((l list) (s seed) ...)
>                  (match l
>                    (() (values s ...))
>                    ((elt . l)
>                     (call-with-values (lambda () (p elt s ...))
>                       (lambda (s ...)
>                         (lp l s ...))))))))))))

Even better.  :-)

Ludo’.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]