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: Andy Wingo
Subject: Re: [PATCH 2/6] ELF refactor and consequent linker simplifications
Date: Thu, 23 May 2013 10:47:05 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.2 (gnu/linux)

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 ...))))))))))))

I'll do that :)

A
-- 
http://wingolog.org/



reply via email to

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