Hello,
I just fell upon a case where implementations seem to differ on what to do. The question is how to interpret a format directive in which the last parameter is followed by a comma. Consider this test case:
(defun fmt (stream argument colonp atsignp &rest params) (declare (ignore stream argument colonp atsignp)) (format t "~S~%" params))
(format t "~1,2/fmt/~%" t) (format t "~1,2,/fmt/~%" t) (format t "~1,2:/fmt/~%" t) (format t "~1,2,:/fmt/~%" t)
Here's what you get from various implementations:
SBCL / ECL / ABCL: (1 2) (1 2 NIL) (1 2) (1 2)
CMU-CL / CCL / CLISP / Allegro / LispWorks: (1 2) (1 2) (1 2) (1 2)
Funnily, my instinct tells me that nobody's right, as I would have expected to get this:
(1 2) (1 2 NIL) (1 2) (1 2 NIL)
Indeed, the parameters list is implicitely terminated by the directive character OR a colon / at-sign. So using a final comma seems to me like adding another, empty, parameter at the end.
I'm willing to report those divergences to the respective implementations, but the problem is that I don't really know what to report :-) Who's right? No matter how I read the spec, I cannot make a decision and it seems to me that this is an unspecified corner case.
I reckon it's probably not a big deal, but this could be a problem for user-defined functions relying on the actual number of parameters that they get.
Comments?