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

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

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

Допустим, имеем иерархию
Листинг программы
  1. Животное
  2. Млекопитающее
  3. Собака
  4. Кошка
  5. Земноводное
  6. Лягушка
  7. Змея
и добавлены следующие правила
Листинг программы
  1. foo = multimethod
  2. foo добавить случай: (x = Млекопитающее y = Земноводное, ...)
  3. foo добавить случай: (x = Собака y = Лягушка, ...)
  4.  
  5. далее, допустим
  6.  
  7. шарик = новая Собака
  8. квакалка = новая Лягушка
  9.  
  10. foo(шарик, квакалка)
Какой из случаев, тип или подтип должен выбрать диспетчер, и почему, какое этому семантическое основание И что будет, если мы засунем в один мультиметод одновременно экземпляры типа и подтипа? Что должен сделать диспетчер в этом случае? Насколько надежным будет приложение, с использованием такого инструмента, учитывая то, что программисту трудно постоянно быть в напряжении и отслеживать возможные конфликты? И наконец, чем оправданна такая экстремальная забубенность? Есть ли реальные кейзы для этого, или это все сделано для галочки, и никто реально с этим сомнительным инструментом не связывается?
Насколько надежным будет приложение, с использованием такого инструмента, учитывая то, что программисту трудно постоянно быть в напряжении и отслеживать возможные конфликты?
и учитывая то, что конфликтовать могут разные модули?
И что будет, если мы засунем в один мультиметод одновременно экземпляры типа и подтипа? Что должен сделать диспетчер в этом случае?
и, если, допустим, будет еще и конфликт такого рода:
Листинг программы
  1. foo(Тип Подтип)
  2. foo(Подтип Тип)
Где тип и подтип подтипы одного типа(надтипа) ? Не является ли это все неоправданным переусложнением? Стоит ли овчинка выделки?
Короче говоря, хочется получить четкую и ясную схему расстановки приоритетов при возникновении разного рода конфликтов, и ясное семантическое обоснование этой схеме с точки зрения проектирования

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

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

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут