Есть такая задача (она кажется на удивление стандартной и общей, у меня к ней сводятся сразу несколько задач, на первый взгляд несвязанных): Есть объекты, которые можно описать вектором параметров. Есть набор правил: Condition1 -> Action1 .............. ConditionN -> ActionN Нужно сгенерировать код который выполнит те Action для которых Condition выполнен. Каждый Condition это булевская комбинация примарных выражений. Примарное выражение это тест из достаточно ограниченного набора типов: например это может быть тест одной переменной на равенство, или меньше-больше Это может быть тест на то матчится ли переменная регэкспом. Это может быть тест на то что линейный функционал от набора переменных больше нуля. Таким образом для примарных выражений очень часто можно автоматически вывести информацию о логическом следовании: например зная значение одного выражения можно узнать значения некоторых других. Более того в случае когда примарные выражения это тест линейного функционала от нескольких переменных, то там можно автоматически вывести отношения следования когда зная значения нескольких выражений можно узнать значения многих других. Разумеется нужно сгенерировать tree-like код, который сможет учитывать зависимости выражений и не будет делать лишние вычисления. Алгоритм который я собираюсь использовать таков: я беру набор всех встречающихся примарных выражений. Дальше я смотрю каждое примарное выражение. Каждое примарное выражение это разделение пространства на две части. Так как примарные выражения имеют фиксированную структуру, то как правило я могу определить совместность набора примарных выражений, таким образом я могу подсчитать L -- кол-во Action'ов не имеющих пересечения с одной части пространства, я смогу подсчитать R -- кол-во Action'ов не имеющих пересечения с другой частью пространства. Еще могут быть Action'ы лежащие и там и там. Дальше я возьму примарное выражение для которого минимально выражение max(L, R). И сгенерирую код который вычислит его и разветвит код на 2 бранча. Далее в каждом бранче я проведу редукцию набора правил с учетом знания значения этого выражения. И повторю процесс для каждого бранча. Теперь вопросы, является ли эта задача стандартной, есть ли у нее имя? Какие другие алгоритмы для ее решения есть? Эта задача кажется ложащейся на Пролог. Умеет ли Пролог ее оптимально решать? Или какие-нибудь другие языки?
Ответ на:
комментарий
от eugine_kosenko
Ответ на:
комментарий
от eugine_kosenko
Ответ на:
комментарий
от tailgunner
Ответ на:
комментарий
от eugine_kosenko
Ответ на:
комментарий
от tailgunner
Ответ на:
комментарий
от eugine_kosenko
Ответ на:
комментарий
от tailgunner
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Набор правил (2010)
- Форум Пролог (2011)
- Форум Пролог (2004)
- Форум Eclipse - автоматически выполнить набор действий (2016)
- Форум Ldap+asterisk правила набора (2018)
- Форум [зачем]пролог (2009)
- Форум Десятое правило Гринспена в действии! (2015)
- Форум Настройка «условий действий» (Action Conditions) в Zabbix (2011)
- Форум Книги по Прологу. (2012)
- Форум пролог в лиспе (2012)