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

Re: Format strings are wrong



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 <schlie@xxxxxxxxxxx>
> Date: Thu, 25 Dec 2003 22:01:54 -0500
> To: <srfi-48@xxxxxxxxxxxxxxxxx>
> 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-