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

Re: Format strings are wrong

This page is part of the web mail archives of SRFI 48 from before July 7th, 2015. The new archives for SRFI 48 contain all messages, not just those from before July 7th, 2015.



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-