Hi Ilya,
Thanks again for pointing out this problem; I've corrected the bug and rolled out 0.3.1.
One perhaps surprising / perhaps wrong thing is outlined in this test:
(addtest (test-negated-categories) start-sender (let ((string (with-output-to-string (stream) (start-sender-fn 'test-negated-categories '(and nc-foo (not nc-bar)) '(message) 'stream-sender :location stream) (log-for (nc-foo) "absence is negation?") (log-for (nc-bar) "no") (log-for (nc-foo (not nc-bar)) "yes") (log-for (and (not nc-foo) (not nc-bar)) "no") ))) (ensure-same string (format nil ""absence is negation?"~&"yes"") :test 'string=)))
The output of the bottom three `log-for` commands is, I think, unobjectionable. The question is what it should do in the `(log-for (nc-foo)` case. Currently, log5 treats the absence of category _as_ negation and so the command outputs the message. It might be better to have a sort-of three-valued logic that incorporated missings but it's not immediately clear that this actually useful or conceptually simple!
If you have any opinions, please me know.
On Dec 20, 2007, at 2:20 PM, Ilya Perminov wrote:
Hi,
The following code gives "Variable BAR undefined" error: (defcategory foo) (defcategory bar) (start-sender 'console-log1 (stream-sender :location *error-output*) :category-spec (and foo (not bar)) :output-spec (category message))
I think the problem is in sender-responds-to-category-p. determine-category-variables returns two list, but sender-responds-to-category-p does not use the second one (negated variables).
Regards, Ilya _______________________________________________ log5-devel mailing list log5-devel@common-lisp.net http://common-lisp.net/cgi-bin/mailman/listinfo/log5-devel
-- Gary Warren King, metabang.com Cell: (413) 559 8738 Fax: (206) 338-4052 gwkkwg on Skype * garethsan on AIM