Пишут, что это необычайно мощная весчь. Только я вот чего не пойму. Что если я вместо такого
(defgeneric collide (x y))
(defmethod collide ((x asteroid) (y asteroid))
  ;;астероид сталкивается с астероидом
  )
(defmethod collide ((x asteroid) (y spaceship))
  ;;астероид сталкивается с космическим кораблем
  )
;;......
(define (collide x y)
 (cond
   ((and (instance? x asteroid) (instance? y asteroid)) 
     ("астероид сталкивается с астероидом"))
   ((and (instance? x asteroid) (instance? y spaceship))
     ("астероид сталкивается с космическим кораблем"))
 ;;;..............
       ))
; И вызываю так
(collide asteroid asteroid)
То что от этого принципиально изменится? То есть я понимаю, что тут есть небольшой синтаксический сахарок, но речь не об этом. Заявляется обычно о том, что это какая то неимоверно мощная техника ООП, которая, чуть ли не затмевает собой все остальное. Например  
Legioner недавно заявил
Полиморфизм (времени выполнения) это сердце ООП. В этой связи, как ни странно, квинтэссенция ООП это мультиметоды
.
Я не спорю, я, вероятно, чего-то не понимаю. Пока я вижу только небольшой сахарок над «функция + ветвление». Хотелось бы увидеть пример применения, который не может быть выражен банальной конструкцией типа «функция + ветвление».
Иными словами, в чем сила?
Спасибо.




