From: David J. Cooper
Subject: format directive "~{...~}"
Date: 
Message-ID: <3877D9A9.4C26C17B@genworks.com>
Happy New Year to all!

I am wondering about using the ~{....~} format directive,
or a similar format directive, to place something before
all but the first element in an argument list.

First, a belated thanks to everyone who helped clarify the
usage of ~{...~^...~} a few months back.

This has been saving me a lot of messy code lately.

As we now know, the ~^ directive allows one to put something
after each element except the last element in the argument 
list, as in:

> (format nil "~{~a~^, ~}" (list 1 2 3 4 5))
"1, 2, 3, 4, 5"

Now I am wondering if there is a way to use this or a similar
directive to put something before all but the first element in
the list, as in:

> (format nil "(~{~a~^,~%~}))" (list one two three))
"(one,
two,
three)"

If possible I would like to extend the above so it outputs

"(one
 two
 three)"

that is, I want an extra space *before* all but the *first* 
element in the argument list, so that the rest of the elements
line up under the first one which has a parenthesis to the left
of it.

In case you are curious, this is for emitting neat-looking SQL
statements, like:

CREATE TABLE TRY
(LAST_NAME VARCHAR(30),
 FIRST_NAME VARCHAR(30),
 SSN VARCHAR(10))

etc.

Thanks for any wisdom!

 -dave

-- 
David J. Cooper Jr, Chief Engineer	Genworks International
·······@genworks.com			5777 West Maple, Suite 130
(248) 932-2512 (Genworks HQ/voicemail)	West Bloomfield, MI 48322-2268
(248) 407-0633 (pager)			http://www.genworks.com

From: Shin
Subject: Re: format directive "~{...~}"
Date: 
Message-ID: <sumg7soilbd21ubumff8d3cdksag48tmah@4ax.com>
On Sun, 09 Jan 2000 03:33:40 GMT, "David J. Cooper" <········@genworks.com>
wrote:

: Now I am wondering if there is a way to use this or a similar
: directive to put something before all but the first element in
: the list, as in:
: 
: > (format nil "(~{~a~^,~%~}))" (list one two three))
: "(one,
: two,
: three)"
: 
: If possible I would like to extend the above so it outputs
: 
: "(one
:  two
:  three)"

USER(1): (format nil "(~{~a~^,~% ~}))" (list 'one 'two 'three))
"(ONE,
 TWO,
 THREE))"

Does it help?

-- Shin
From: Erik Naggum
Subject: Re: format directive "~{...~}"
Date: 
Message-ID: <3156569413180279@naggum.no>
* Shin <···@retemail.es>
| USER(1): (format nil "(~{~a~^,~% ~}))" (list 'one 'two 'three))
| "(ONE,
|  TWO,
|  THREE))"

  for this to work, you would need to do ~& first, and it will fail to
  produce the correct output if any forms are nested.  using the
  pretty-printer interface will work in such cases.

#:Erik