From: Christophe R. <cs...@ca...> - 2013-06-30 07:53:37
|
"Paul Khuong" <pk...@us...> writes: > Revert to binding *package* in bootstrappy code > > I see no sane way to use sb!ext:print-symbol-with-prefix or > sb-ext:... in ~//. Bind *package* to :keyword instead, for > undefined function conditions. > > Reported by adeth on #lisp. What about (defun print-symbol-with-prefix (*standard-output* &rest objects) (let ((*package* (find-package "KEYWORD"))) (write (car objects) :stream *standard-output* :escape t))) ... (:report (lambda (condition stream) (format stream "The function ~? is undefined." 'print-symbol-with-prefix (list (cell-error-name condition))))) ? Cheers, Christophe |
From: Zach B. <xa...@xa...> - 2013-06-30 21:39:35
|
Christophe Rhodes <cs...@ca...> writes: > "Paul Khuong" <pk...@us...> writes: > >> Revert to binding *package* in bootstrappy code >> >> I see no sane way to use sb!ext:print-symbol-with-prefix or >> sb-ext:... in ~//. Bind *package* to :keyword instead, for >> undefined function conditions. >> >> Reported by adeth on #lisp. > > What about > > (defun print-symbol-with-prefix (*standard-output* &rest objects) > (let ((*package* (find-package "KEYWORD"))) > (write (car objects) :stream *standard-output* :escape t))) > > ... > (:report > (lambda (condition stream) > (format stream "The function ~? is undefined." > 'print-symbol-with-prefix (list (cell-error-name condition))))) I didn't try this with a condition, but just from the REPL, I get a type failure; PRINT-SYMBOL-WITH-PREFIX is not a format control string as ~? expects. Am I missing something? Zach |
From: Christophe R. <cs...@ca...> - 2013-07-01 06:15:34
|
Zach Beane <xa...@xa...> writes: > Christophe Rhodes <cs...@ca...> writes: > >> (format stream "The function ~? is undefined." >> 'print-symbol-with-prefix (list (cell-error-name condition))))) > > I didn't try this with a condition, but just from the REPL, I get a type > failure; PRINT-SYMBOL-WITH-PREFIX is not a format control string as ~? > expects. > > Am I missing something? No, I did: a single #\# character. The ~? needs a format control, which is a string or a function designator. (format t "The function ~? is undefined." #'print-symbol-with-prefix[new-definition] (list 'foo)) should work. Cheers, Christophe |
From: Zach B. <xa...@xa...> - 2013-07-01 11:41:15
|
Christophe Rhodes <cs...@ca...> writes: > Zach Beane <xa...@xa...> writes: > >> Christophe Rhodes <cs...@ca...> writes: >> >>> (format stream "The function ~? is undefined." >>> 'print-symbol-with-prefix (list (cell-error-name condition))))) >> >> I didn't try this with a condition, but just from the REPL, I get a type >> failure; PRINT-SYMBOL-WITH-PREFIX is not a format control string as ~? >> expects. >> >> Am I missing something? > > No, I did: a single #\# character. The ~? needs a format control, which > is a string or a function designator. > > (format t "The function ~? is undefined." > #'print-symbol-with-prefix[new-definition] (list 'foo)) > > should work. Interesting! The error I got included this: Wanted one of (STRING SIMPLE-STRING). That short-circuited my brain into thinking only stringy things are allowed. Zach |
From: Anton K. <an...@sw...> - 2013-07-01 06:26:59
|
Zach Beane <xa...@xa...> writes: > I didn't try this with a condition, but just from the REPL, I get a type > failure; PRINT-SYMBOL-WITH-PREFIX is not a format control string as ~? > expects. > > Am I missing something? I believe it is meant to be #'PRINT-SYMBOL-WITH-PREFIX instead of 'PRINT-SYMBOL-WITH-PREFIX (Per CLHS definition, "format control" can be a function, but not a function designator) -- Regards, Anton Kovalenko <http://github.com/akovalenko/sbcl-win32-threads/wiki> +7(916)345-34-02 | Elektrostal' MO, Russia |
From: Paul K. <pv...@pv...> - 2013-06-30 13:12:05
|
Christophe Rhodes wrote: > (defun print-symbol-with-prefix (*standard-output* &rest objects) > (let ((*package* (find-package "KEYWORD"))) > (write (car objects) :stream *standard-output* :escape t))) > > ... > (:report > (lambda (condition stream) > (format stream "The function ~? is undefined." > 'print-symbol-with-prefix (list (cell-error-name condition))))) Oh, nifty. My format-fu is weak. This looks better than manually binding *package*, but ~// seems to cover the common case much better, once we're done with our sb!package tricks. Paul Khuong |