Here are define-macro versions of `let-string-start+end' and `let-string-start+end2' needed by the reference implementation of srfi-13. I'm still reading over everyone else's work, so I don't know if these will be useful or not.
------------------------------------------------------------------------------- (define-macro (let-string-start+end start+end proc s-exp args-exp . body) (or (list? start+end) (error "let-string-start+end: start+end must be list")) (case (length start+end) ((2) `(receive ,start+end (string-parse-final-start+end ,proc ,s-exp ,args-exp) ,@body)) ((3) `(receive ,start+end (string-parse-start+end ,proc ,s-exp ,args-exp) ,@body)) (else (error "let-string-start+end: wrong length start+end"))))
(define-macro (let-string-start+end2 start+end-pair proc str1 str2 args . body) (or (list? start+end-pair) (error "let-string-start+end: start+end-pair must be list")) (let ((rest (gensym)) (procv (gensym))) (receive (start1 end1 start2 end2) (apply values start+end-pair) `(let ((,procv ,proc)) ; Make sure PROC is only evaluated once. (let-string-start+end (,rest ,start1 ,end1) ,procv ,str1 ,args (let-string-start+end (,start2 ,end2) ,procv ,str2 ,rest ,@body)))))) -------------------------------------------------------------------------------
Regards,
Ben