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

Question regarding FORMAT with ~:^ within ~:{

I have a question regarding the correct behavior of FORMAT.  Please
open up your CLtL books to page 406 and tell me what the following
construct should return:

	(format nil "~:{~@?~:^...~}" '(("a") ("b")))

MY CLAIM: It should return "a".

THE RATIONALE: According to the Steele's spec, the ~:^ construct (with
the : modifier) should exit ALL iterations, therefore, FORMAT only gets
as far as printing the "a" before it quits.  CLtL page 406 states that:

   "If ~^ is used within a ~:{ construct, then it merely terminates
   the current iteration step (because in the standard case it tests
   for remaining arguments of the current step only); the next
   iteration step commences immediately.  To terminate the entire
   iteration process, use ~:^."

OTHER PEOPLE CLAIM: It should return "a...b".

THE RATIONALE: Since ~:^ is planning to exit the entire iteration it
should check whether there are more arguments to the entire iteration,
rather than checking for more arguments in the current sublist.

A SYMBOLICS 3600 CLAIMS: It should return "a...b"

THE RATIONALE:  I don't know, but that's what I got when I typed the
example in.

In closing, I might even agree that "a...b" would be more useful
behavior, but it is not in keeping with a strict interpretation of
Steele's specification.  I'd be interested in cogent comments and

- Robert Poor
  Lucid, Inc