CLIPS (шаблоны) - семейные отношения: проблемы с обработкой шаблонов и исходных фактов при написании правил - PullRequest
0 голосов
/ 25 октября 2018

Я борюсь со следующей проблемой программирования CLIPS:

Задача : напишите набор правил для определения семейных отношений, таких как:

(брат? X? Y) (т. е. «х - брат у»)

(сестра? х? у) (т. е. «х - сестра у»)

(сын? х? у) (т. е. «х - сын y»)

(дочь? x? y) (т. е. «x - дочь y»)

Ограничение в этой задаче состоит в том, что правила могутбыть построенным только из следующих посылок:

(отец? x? y) (т. е. «х есть отец у»)

(мать? х? у) (то есть «х естьмать y ")

(мужчина? x) (то есть" x - мужчина ")

(женщина? y) (то есть" y - женщина ")

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

Моя попытка

Я создал шаблоны и исходные факты следующим образом:

(deftemplate father-of 
    (slot father)
    (slot child)
)

(deftemplate mother-of 
    (slot mother)
    (slot child)
)

(deftemplate male
    (slot person)
)

(deftemplate female
    (slot person)
 )

(deffacts family
      (mother-of(mother Anna) (child Tracy)
      (mother-of(mother Anna) (child Cindy)
      (female Anna)
      (female Tracy)
      (female Cindy)
 )

Моя попыткаНаписание правила проверки того, является ли определенный человек сестрой другого человека, было следующим:

(defrule sister-of
      (and
           (female (person ?x))
           (female (person ?y))
           (female (person ?z))
           (mother-of (mother ?x) (child ?y))
           (mother-of (mother ?x) (child ?z))
       )
=>
(assert (sister ?y  ?z))
(printout t ?y " is a sister of " ?z crlf)
)

Ошибка вывода

После загрузки файла .clp я последовательнополучить следующее сообщение об ошибке такой формы:

         CLIPS (6.30 3/17/15)
CLIPS> (reset)
CLIPS> (clear)
CLIPS> (load family.clp)
Defining deftemplate: father-of
Defining deftemplate: mother-of
Defining deftemplate: male
Defining deftemplate: female
Defining deffacts: family

[PRNTUTIL2] Syntax Error:  Check appropriate syntax for deftemplate pattern.

ERROR:
(deffacts MAIN::family
   (mother-of (mother Anna) (child Markus))
   (female Anna
FALSE
CLIPS>

Мои попытки

Я проверил руководства CLIPS относительно базового программирования, сообщение об ошибке Google, но я не сделал никакихПрогресс.

Помощь будет принята с благодарностью !!!Для меня достаточно посмотреть, как этот материал работает в случае написания правила (сестра? X? Y) со всеми приведенными выше шаблонами и фактами.

1 Ответ

0 голосов
/ 25 октября 2018

Если вы определяете deftemplate для факта, вы должны включить имена слотов при указании значений слотов.

(deffacts family
      (mother-of(mother Anna) (child Tracy))
      (mother-of(mother Anna) (child Cindy))
      (female (person Anna))
      (female (person Tracy))
      (female (person Cindy))
 )
...