Edi Weitz [edi@agharta.de] wrote:
Thanks for the reply. I'll try the things you mentioned but I just wanted to get to one thing, first.
Some ideas:
Your methods for the generic function EXPECT don't have congruent lambda lists:
;; expected is a parse-tree (defmethod expect ((expected t) (spawn stream) &key (echo *standard-output*) case-insensitive-mode multi-line-mode single-line-mode extended-mode destructive) #| ... |#)
;; expected is a scanner (defmethod expect ((expected function) (spawn extensions::process) &key (echo *standard-output*)) #| ... |#)
This can lead to incosistent behaviour of all sorts, so you should change that first and see if it makes a difference.
When you write that the lambda lists are not congruent, I assume you mean that they have different keywords and are, therefore, not congruent. Consider the CLHS section 7.6.4 http://www.lispworks.com/reference/HyperSpec/Body/07_fd.htm:
4. If the generic function lambda list mentions &key, each method must accept all of the keyword names mentioned after &key, either by accepting them explicitly, by specifying &allow-other-keys, or by specifying &rest but not &key. Each method can accept additional keyword arguments of its own. [...]
I believe that that all of the EXPECT methods are congruent by that definition. Or did you have something other than keyword argument equivalence in mind whne you wrote about the lambda lists not being congruent?