2017-09-24 13 views
0

클립 프로그래밍 언어로 기본 전문가 시스템을 구현하려고합니다. 나는 그들의 부모와 함께 아이들의 지식 기반을 가지고있다. 나는 규칙을 정하여 두 자녀가 같은 부모를 가졌다면 형제라는 사실을 주장하도록 규칙을 만들고 싶습니다. 하는 templaterule클립 클립 전문가 전문가 시스템

(defrule sibling 
    (person (name ?name1) (father ?x) (mother ?x)) 
    (person (name ?name2) (father ?y) (mother ?y)) 
    => 
    ...) 

:

Syntax Error: Check appropriate syntax for defrule. 

답변

0

규칙에 대한 올바른 구문은 다음과 같습니다 나는 규칙을 정의 할 때


(deftemplate person "family tree" 
      (slot name) 
      (slot father) 
      (slot mother)) 

(assert 
     (person 
       (name "William") 
       (father "John") 
       (mother "Megan"))) 
(assert 
     (person (name "David") 
       (father "John") 
       (mother "Megan"))) 

(defrule sibling 
     (person 
       (name ?name1) 
       (father ?x) 
       (mother ?x)) 
     (person 
       (name ?name2) 
       (father ?y) 
       (mother ?y))) 

와 나는 구문 오류

(template_name (slot_name value) (slot_name value)) 

규칙은 규칙을 만족하는 조건을 정의하는 LHS (왼손잡이)와 결과 동작을 정의하는 RHS (오른쪽)의 두 측면으로 나뉩니다.

CLIPS에서 => 연산자는 두면을 분리합니다.

예 :

(defrule animal-is-a-duck 
    (animal ?name) 
    (quacks) 
    (two legs) 
    (lay eggs) 
    => 
    (assert (animal ?name is a duck))) 

당신은 basic programming guide에서 클립 구문에 대한 자세한 내용을보실 수 있습니다.

+0

고마워요.하지만 내 형제 직전에 MAIN ::을 넣어야했습니다. 하지만 이제 내가 '단언'에서 규칙을 호출하면 오류가 계속 발생합니다. 나는 구문을 시도했다.'(MAIN :: sibling (person "name"First_Person ")) (person (name"Second_Person ")) person ("William"))))'MAIN :: 시도해 보지 않았습니까? – cdruckemiller

+0

어떤 오류가 발생했는지 지정하여 질문을 편집하십시오. 또한 각 문장을 구분하는 데 유용하게 쓰이는 개행 문자와 사실 및 규칙을 작성하십시오. – noxdafox

+0

미안하지만 대답을 받아 들일 수 밖에 없었습니다. 그 규칙은 실제로 통과하지 못했습니다. 구문 오류가 발생했습니다. 나는 나의 코드와 나의 오류를 보여주기 위해 질문을 편집했다. – cdruckemiller