Hi,
As part of implementing slime-style macroexpansion in a web app (code[1], demo[2]), I've noticed an oddity in sbcl's pretty printing:
CL-USER> (pprint '(lambda (&key (bar 'baz))))
(LAMBDA (&KEY (BAR (QUOTE BAZ)))) ; No value CL-USER> (pprint '(lambda (foo &key (bar 'baz))))
(LAMBDA (FOO &KEY (BAR 'BAZ))) ; No value
Looking in the source for SB-PRETTY:PPRINT-LAMBDA-LIST[3] it appears to be written as a state machine, and there are 2 bugs: first the state is set once, and only once, because the state change CASE only runs when FIRST is null (and therefore if you have a positional argument, then all subsequent arguments are printed as if positional), the second is to do with printing default values.
1 https://github.com/pjstirling/pastecode 2 http://pjstirling.plus.com/paste/expand/?id=5&entry=5 3 sbcl/src/code/pprint.lisp:1031
--- This email has been checked for viruses by Avast antivirus software. https://www.avast.com/antivirus