Приложение, над которым я работаю, является своего рода "конфигуратором". Он написан на C #, и я даже написал для него механизм правил. Идея состоит в том, что существует набор утверждений логики высказываний, и пользователь может делать выбор. В зависимости от того, что они выбрали, некоторые другие элементы становятся необходимыми или полностью недоступными.
Утверждения логики высказываний обычно принимают следующие формы:
A => ~X
ABC => ~(X+Y)
A+B => Q
A(~(B+C)) => ~Q A <=> B
Символы:
=> -- Implication
<=> -- Material Equivalence
~ -- Not
+ -- Or
Two letters side-by-side -- And
Я новичок в Prolog, но кажется как будто он мог бы справиться со всей «обработкой правил» за меня, что позволило бы мне выйти из моего текущего механизма правил (он работает, но не так быстро и легко поддерживать, как хотелось бы).
В Кроме того, все доступные параметры попадают в иерархию. Например:
Outside
Color
Red
Blue
Green
Material
Wood
Metal
Если подразумевается элемент на втором уровне (функция, например, цвет), то необходимо выбрать элемент на третьем уровне (например, красный). Точно так же, если мы знаем, что функция ложна, тогда все параметры под ней также ложны.
Уловка в том, что у каждого продукта есть свой собственный набор правил. Является ли разумным подход создать базу знаний, содержащую эти операторы в качестве предикатов, а затем во время выполнения начать сборку всех правил для продукта?
Я предполагаю, что это могло бы сработать, чтобы настроить идею компонентов, функции и параметры. Затем установите отношения между ними (например, если функция ложна, то все ее параметры ложны). Во время выполнениядобавить особые правила продукта. Затем передайте все выборы пользователя в функцию, получая в качестве вывода, какие элементы истинны, а какие - ложны.
Я не знаю всех последствий того, о чем я спрашиваю, так как я только начинаю Пролог, но я стараюсь не пойти по плохому пути и не тратить много времени на это.
Некоторые вопросы, которые могут помочь понять то, что я пытаюсь выяснить:
Заранее благодарю за ваш совет!