Мультидиспетчеризация в Лиспе - Священные войны

Узнай цену своей работы

Формулировка задачи:

Допустим, имеем иерархию
Животное
   Млекопитающее
       Собака
       Кошка
   Земноводное
       Лягушка
       Змея
и добавлены следующие правила
foo = multimethod
foo добавить случай: (x = Млекопитающее y = Земноводное, ...)
foo добавить случай: (x = Собака y = Лягушка, ...)

далее, допустим

шарик = новая Собака
квакалка = новая Лягушка

foo(шарик, квакалка)
Какой из случаев, тип или подтип должен выбрать диспетчер, и почему, какое этому семантическое основание И что будет, если мы засунем в один мультиметод одновременно экземпляры типа и подтипа? Что должен сделать диспетчер в этом случае? Насколько надежным будет приложение, с использованием такого инструмента, учитывая то, что программисту трудно постоянно быть в напряжении и отслеживать возможные конфликты? И наконец, чем оправданна такая экстремальная забубенность? Есть ли реальные кейзы для этого, или это все сделано для галочки, и никто реально с этим сомнительным инструментом не связывается?
Насколько надежным будет приложение, с использованием такого инструмента, учитывая то, что программисту трудно постоянно быть в напряжении и отслеживать возможные конфликты?
и учитывая то, что конфликтовать могут разные модули?
И что будет, если мы засунем в один мультиметод одновременно экземпляры типа и подтипа? Что должен сделать диспетчер в этом случае?
и, если, допустим, будет еще и конфликт такого рода:
foo(Тип Подтип)
foo(Подтип Тип)
Где тип и подтип подтипы одного типа(надтипа) ? Не является ли это все неоправданным переусложнением? Стоит ли овчинка выделки?
Короче говоря, хочется получить четкую и ясную схему расстановки приоритетов при возникновении разного рода конфликтов, и ясное семантическое обоснование этой схеме с точки зрения проектирования

Решение задачи: «Мультидиспетчеризация в Лиспе»

textual
Листинг программы
foo добавить случай: (x = Животное y = Земноводное, ...)
foo добавить случай: (x = Земноводное y = Животное, ...)

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.818 из 5