Вы также можете добавить DCG для создания ведомости материалов.Идея заключается в том, что терминалы можно использовать для указания субпродуктов, а нетерминалы - для определения все более сложных комбинаций субпродуктов, пока вы не дойдете до конечных конфигурируемых продуктов.
Возьмем, к примеру, две пары значений атрибутовЦвет в {красный, синий, зеленый} и материал в {дерево, металл}.Они могут указывать ручку двери, при которой возможны не все комбинации:
knob(red,wood) --> ['100101'].
knob(red,metal) --> ['100102'].
knob(blue,metal) --> ['100202'].
Затем вы можете определить дверь как:
door ... --> knob ..., panel ...
Интересно, что вы не увидите никакой логической формулы в такихспецификация продукта, только факты и правила, и множество параметров, переданных вокруг.Вы можете использовать параметры в компоненте получения знаний.Просто выполнив необоснованные цели, вы можете получить возможные значения для пар значений атрибутов.Предикат setof / 3 будет сортировать и удалять дубликаты для вас:
?- setof(Color,Material^Bill^knob(Color,Material,Bill,[]),Values).
Value = [blue, red]
?- setof(Material,Color^Bill^knob(Color,Material,Bill,[]),Values).
Material = [metal, wood]
Теперь вы знаете диапазон атрибутов и можете позволить конечному пользователю последовательно выбирать атрибут и значение.Предположим, он берет атрибут Color и его значение blue.Диапазон атрибута Материал затем сжимается соответственно:
?- setof(Material,Bill^knob(blue,Material,Bill,[]),Values).
Material = [metal]
В конце, когда все атрибуты были указаны, вы можете прочитать номера артикулов субпродуктов.Вы можете использовать это для расчета цены, добавив некоторые факты, которые дают вам дополнительную информацию о номерах артикулов, или для создания списков заказов и т. Д.:
?- knob(blue,metal,Bill,[]).
Bill = ['100202']
С наилучшими пожеланиями
PS:О, похоже, что идея спецификации материалов, использованная в конфигураторе продукта, восходит к Clocksin & Mellish.По крайней мере, я нахожу соответствующий комментарий здесь: http://www.amzi.com/manuals/amzi/pro/ref_dcg.htm#DCGBillMaterials