[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’.
[PATCH 3/6] elf: add accessors for header members that might need relocation, Andy Wingo, 2013/05/18