Начинающий на прологе - это плохая идея?

Приложение, над которым я работаю, является своего рода "конфигуратором". Он написан на 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

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

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

Я предполагаю, что это могло бы сработать, чтобы настроить идею компонентов, функции и параметры. Затем установите отношения между ними (например, если функция ложна, то все ее параметры ложны). Во время выполнениядобавить особые правила продукта. Затем передайте все выборы пользователя в функцию, получая в качестве вывода, какие элементы истинны, а какие - ложны.

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

Некоторые вопросы, которые могут помочь понять то, что я пытаюсь выяснить:

  1. Звучит ли это выполнимо?
  2. Я лаю не на то дерево?
  3. Есть ли какие-либо недостатки или опасения в попытке создать все эти правила во время выполнения?
  4. Есть ли лучшая система для такого рода вещей, которую я мог бы втиснуть в приложение C # (Silverlight, если быть точным)?
  5. Есть ли другие конкурирующие системы, которые мне следует изучить?
  6. У вас есть какие-либо общие советы по этому поводу?

Заранее благодарю за ваш совет!

11
задан Fred Foo 21 July 2011 в 20:33
поделиться