Является ли саморекурсивный мультиметод clojure хорошим решением для вложенной задачи классификации? - PullRequest
1 голос
/ 01 марта 2011

У меня есть большая последовательность карт данных, и каждая карта должна быть классифицирована вложенным способом.

, т. Е. Данный элемент может быть A или B (как определено функцией), еслиэто B, тогда это может быть C или D (определяется другой функцией) и так далее.На каждом этапе к каждой карте может быть добавлено больше данных, относящихся к классификации.Функции для выполнения классификации сами по себе довольно сложны и, возможно, потребуется внести дополнительные данные, чтобы сделать определения.

Будет ли саморекурсивный мультиметод хорошим способом структурировать код для этого?Я бы отправил на наиболее конкретный тип, определенный на данный момент для предмета, или вернул бы лучшую текущую классификацию, когда больше ничего нельзя сделать.

I мог бы получить желаемый эффект с вложенными if внутриодиночная классификационная функция, но черт возьми, это уродливо.

Подходит ли здесь мультиметод или я слишком усложняю вещи и упускаю более простой способ структурирования кода?

Ответы [ 2 ]

1 голос
/ 02 марта 2011

Похоже, здесь могут быть полезны мультиметоды. Я предполагаю, что вся сложность в функции отправки? Поэтому, когда вы классифицируете верхний уровень, вы снова запускаете мультиметод с дополнительной информацией, которая запускает другой экземпляр?

Еще один способ думать, что это основано на обходе дерева решений, а не на вводе. Интересно, может ли использование clojure.zip пройти по дереву классификационных функций быть интересным решением? Ваша классификационная функция в каждом узле может сказать вам, как в следующий раз пройти по дереву (к какому дочернему элементу перейти). Вам не понадобится clojure.zip, но в нем уже есть древовидная навигация.

0 голосов
/ 02 марта 2011

мультиметоды великолепны, потому что они позволяют этот уровень диспетчеризации, когда сложность проблемы требует его.Я говорю, дерзайте, если он делает то, что вы хотите.

Возможно, вы могли бы построить isa иерархию , чтобы помочь

...