Email list hosting service & mailing list manager
Sorry, now with expected basic list format behavior: (module string mzscheme (provide (rename new-string string)) (define (new-string . params) (letrec ((loop (lambda (val rest space) (string-append (if space " " "") (cond ((string? val) val) ((number? val) (number->string val)) ((symbol? val) (symbol->string val)) ((list? val) (string-append "(" (loop (car val) '() #f) (if (pair? (cdr val)) (loop (cadr val) (cddr val) #t) "") ")" )) ((char? val) (string val)) (else (begin (error 'string) ""))) (if (pair? rest) (loop (car rest) (cdr rest) space) ""))))) (loop (car params) (cdr params) #f)))) > From: Paul Schlie <xxxxxx@comcast.net> > Date: Thu, 25 Dec 2003 22:01:54 -0500 > To: <srfi-48@srfi.schemers.org> > Subject: Re: Format strings are wrong > > Where a basic implementation of an extend (string ...) function using > mzscheme's module system could alleviate the necessity for the most > common historical uses of (format ...) for basic string formatting: > > (module string mzscheme > (provide (rename new-string string)) > (define (new-string . params) > (letrec ((loop (lambda (val rest space) > (string-append > (if space " " "") > (cond > ((string? val) val) > ((number? val) (number->string val)) > ((symbol? val) (symbol->string val)) > ((list? val) (string-append > "(" (loop (car val) '() #f) > (loop (cadr val) (cddr val) #t) ")")) > ((char? val) (string val)) > (else (begin (error'string) ""))) > (if (pair? rest) (loop (car rest) (cdr rest) space) ""))))) > (loop (car params) (cdr params) #f)))) > > (require string) > > (define size 3) > (define what 'apples) > > (string "I have " size " " what ", a character: " #\c > ", and a list: " '(a 3.12 1/2 (f) symbol) ".") > > -> "I have 3 apples, a character: c, and a list: (a 3.12 1/2 (f) symbol)." > > -paul-