    
  
 
 
  


       
          
          
       
         
        
 
          
      
         
       
      
         
       

         
         
       
             
       
       
         
         

 
   
  
     
       


      
      
     

  
       
         
                
             
              
             
      
     
     
  

        


        
     

 
         
          
 
      

         

        
         
        
     

      
        
     
         
        
        
        
          
        
        
         
       

        
           
         
       
   
        
        
        
         
         
     
           
          
  
 

  
     
      
          
         
        
         

       
       
         
       
       
       
      
         
       
         
          
         
         
        
          
       
        
         
        
        
         
       
          
          
       
         
   
         
       
         
        
       
      
           
          
        
          
       
       
         
        
        
       
       
   
         
        
      
   
         
 
2.1.1 Description

method-combination
       
       
       












      
     
method-combination

          
 
         
standard-method-combination
     
          
          
 
standard-class
standard-generic-
function  standard-method 
        
           

short-method-combination

long-method-combination

2.1.2 Analysis
         
         


type-name
operator
identity-with-one-argument

args-lambda-list
    
define-
method-combination

options
     
      
:method-combination

  
defgeneric
    
         
  options 
         
       
    
        
method-
combination 
      
         
  
         
         


          




 
 
      
         
    
         
          
         
     
:generic-function
 
   
      
function
   
         
         
        
*long-
method-combination-functions*
   
        

compute-effective-method
      
        
  options 
2.1.3 Summary
         
        
        
         
         
        
        

long-method-combination
    

  
          
       
       
         
        
    
        
  
method-combination-info
  
     
**method-combinations**
       
  
lambda-list
    
            
   
2.2.1 Instantiation
    
cache
  
         
     
options
 
 
find-method-combination
   
        
          
      
constructor

         
        
short-
 long-method-combination 
2.2.2 Redefinition
          
  
%generic-functions
 
standard-method-
combination
       
       
      
define-
method-combination
      
      
change-class
 
        
     
%generic-functions
         
   reinitialize-instance
          
          
    
2.2.3 Updating
          
          
%generic-functions
         
      
[re]initial-
ize-instance
2.2.4 Summary
       
        
          
     
       
method-combination-
info
    
*long-method-combina-
tion-functions*
       
   
function
    
        
  
        


           
        
          
         
      
          
  
        
       
      
  
      
     
       
       
 
          
       
        
      
 
 
         
standard
          
 
short-

long-method-combination
 
        
    
define-method-combination

     
     
define-method-combination
             
         
   
         
        
       
define-method-
combination
       
         
          
        
   
short-

long-method-combination

      
short-

long-method-
combination-type
          
       
       
         
  
       
      
   
standard-method-combination
  
      
            
     
standard-class
standard-generic-function  standard-method
        
         
         
options
    
:method-combination
  

defgeneric
 
%generic-functions
   
       

short-

long-method-combination
   
     
   
       
         







 
    













     
     
method-combination-
info 

standard-method-combination-type
   
          
        
short-

long-method-combination
    
         
short-

long-
method-combination-type
      
  %function     
   
          
         
  
         
          
         
        
          




 standard
 nil

 (nil . )







 nil

     
         
          
         
       
   
standard-standard-method-combination
           
standard-
method-combination
     
standard-
method-combination-type
     
standard
    nil
       
%con-
structor
         
   
nil
      
   
*standard-method-combination*
 
 
 
%cache
    
  nil     
   
        
         
      
define-method-combination
          
         
(define-method-combination progn
:identity-with-one-argument t)
  
short-method-combination
  
 
short-method-combination-type
 
 
progn
  
operator
       
          
       define-method-combination
        
(defgeneric gf1 (...)
(:method-combination progn))
(defgeneric gf2 (...)
(:method-combination progn :most-specific-last))

%constructor
       
     
progn
  
mc1

mc2
        

%cache
     












anonymous
 progn
 (&optional (order :most-specific-first))
 progn
 t

 (nil . ) ((:most-specific-last) . )


 nil



 (:most-specific-last)




   progn  
        
  
     
progn
 
        
           
             
         
          
  
standard-standard-method-combination

        
 
compute-effective-method
 
short-method-
combination
 
long-method-combination
   
       
          
          
           
    
(defmethod compute-effective-method
((gf generic-function)
(mc standard-standard-method-combination)
applicable-methods)
...)
 
        
         
   
        
         
          

       










     
        
 
standard
 
or
      
          
           
          

3.6.1 Bootstrap
        
          
         
         
     
early-standard-
method-combination

early-short-method-combination

           
          
          
         
       
3.6.2 Injection
        
 
standard
      
          
           
        
          
*standard-method-combination*

*or-method-combina-
tion*
           
          
          
       
       
3.6.3 Additions
        
 

       
       
     find-class 
find-method-combination-type
(name &optional (errorp t))
"Find a NAMEd method combination type.
If ERRORP (the default), throw an error if no such
method combination type is found.
Otherwise, return NIL."
   

     
 
find-method-combination
   
     
𝑛𝑑

𝑟𝑑

          
    
𝑠𝑡
    
             
    
find-method-combination*
(name &optional options (errorp t))
"Find a method combination object for NAME and OPTIONS.
If ERRORP (the default), throw an error if no NAMEd
method combination type is found.
Otherwise, return NIL.
Note that when a NAMEd method combination type exists,
asking for a new set of (conformant) OPTIONS will
always instantiate the combination again, regardless
of the value of ERRORP."

       
        
         
          
         
         
         
:allocation
:class  
        
          
           
         
          
        
     
         
        
        
   
  
         
         
  
4.1.1 Method Combination Types Redefinition
        
 
sb-pcl

change-class
  
       
          
  
          
        
  
:after
 
update-instance-for-differ-
ent-class
       
    
          
u-g-f-f-r-m-c
     


          
      
4.1.2 Method Combination Types Definition
         
        
        
  
       
          
          
      
define-
method-combination
       
         
         
     
:method-combination-class name
:method-combination-type-class name

:method-combination-type-class (name initargs*)
           
          
:arguments
 :generic-function   
(:method-combination-class name)
(:method-combination-type-class name initargs*)
           
           
   
short-method-combination[-type]

     
          
       
  
     
   
        
        
:before

:after
       
        
       
        
operator

identity-with-one-argument
   
  
print-object
   
   


       
          

update-generic-function-for-redefined-method-combination















       
(define-medium-method-combination-type myprogn
:operator progn :identity-with-one-argument t)
      
(define-method-combination myprogn
(&optional (order :most-specific-first))
((around (:around))
(before (:before))
(primary () :order order :required t)
(after (:after)))
(:method-combination-type-class
medium-method-combination-type
:operator progn :identity-with-one-argument t)
...)
         
           
    
compute-effective-
method       
   
       
 

          
        
         
      
         
         
 
#!combination(func arg1 arg2 ...)
   
           
   
#!append(func arg1 arg2 ...)
#!nconc(func arg1 arg2 ...)
       
          
             
        
    
       



    




 
    
4.3.1 Alternative Calls
         
  
%functions
    
         
        
        
       
          

          
          
            
        
         
         
     
      
         
       
           
4.3.2 Generic Function Modification

:after
   
add-method

remove-
method
        
   
4.3.3 Method Combination Change

:around
 
reinitialize-instance
  
        
           
          
       
        
0
0.5
1
1.5
2
2.5
3
3.5
4
     



  compute-effective-method 
4.3.4 Method Combination Redefinition
   
u-g-f-f-r-m-c

    
         
         
       
 

         
          
       
           
       
          
         
compute-
effective-method
      

        
       
     

         
 
short-compute-effective-method
 
       
         
   

         
        

         
         
compute-effective-method
      
       
         
         
             
        

update-generic-function-for-redefined-method-combination
          
           
 
   
         
          
         
     
short-compute-effective-
method
      
        
       
         
        
         
       
class-of
     
(accessor mc-object)

(accessor (class-of mc-object))
   
          
         
          
      
        
           
         
           
          
      
 
   
           
          
         
          

     
compute-effective-method
        
         
        
           
          
          
    (accessor (class-of mc-object))
  
       
       
define-method-
combination
        
       
          
    
        
      
      
          
          
        
           
        
       
          
         
        
               
          
 
         
          
         
        
:description
 
         
         
        
            
   
         
          
    
define-method-combination

         
         
standard-method-
combination

standard-method-combination-type
 
    compute-effective-method
       
    
define-method-combination
  
        
  
*
      
           
             
         
       
           
        
        
            
          
          
       
 compute-effective-method


          
        
        
  

            
          
     

      
        

         
        
      


           
         
 
       

            
        
  

         
          
 

        
      

              
      

         
  

        
        
          


        
         
           
    

            
     

       
   

         
        
