| Newsgroups |
gmane.comp.ai.powerloom |
| Message-ID |
<[email protected]> |
Thanx again for your help.
I read about FRL, and I am interested to "make it alive" in PowerLoom.
I create Frame definition:
There's HUMAN frame with one slot, NAME.
There's STUDENT-FTI frame with one slot, DEPARTMENT. STUDENT-FTI is AKO HUMAN.
DEPARTMENT slot has default value "FTI". NAME slot is "inherited" from HUMAN
frame.
There's STUDENT frame with one slot, STUDENT_ID. STUDENT is AKO STUDENT-FTI.
NAME and DEPARTMENT slot are "inherited" from STUDENT-FTI frame.
Then I create this definition. As usual (again...sorry), I face a problem. I
have
problem with default value here....
This is my definition (from ";;===START" until ";;===STOP")
;;===START
(clear-module pl-user)
;;(FASSERT HUMAN
;; (NAME ($REQUIRE (STRING :SLOT)))
;; (CLASSIFICATION ($VALUE (GENERIC)))
;;).
(clear-module pl-user)
(defconcept HUMAN (?HUMAN))
(deffunction HUMAN_NAME ((?HUMAN HUMAN)) :-> (?NAME STRING))
(defrelation HUMAN-NAME ((?NAME STRING)(?HUMAN HUMAN))
:<<=>> (= (HUMAN_NAME ?HUMAN) ?NAME))
;;(FASSERT STUDENT-FTI
;; (AKO ($VALUE (HUMAN)))
;; (DEPARTMENT ($DEFAULT (FTI))
;; ($REQUIRE (STRING :SLOT)))
;; (CLASSIFICATION ($VALUE (GENERIC)))
;;).
(defconcept STUDENT-FTI ((?HUMAN HUMAN)))
(defrelation STUDENT-FTI-NAME ((?NAME STRING)(?STUDENT-FTI STUDENT-FTI))
:<<=>> (= (HUMAN_NAME ?STUDENT-FTI) ?NAME))
(deffunction STUDENT-FTI_DEPARTMENT ((?STUDENT-FTI STUDENT-FTI))
:-> (?DEPARTMENT STRING))
(defrelation STUDENT-FTI-DEPARTMENT (?DEPARTMENT (?STUDENT-FTI STUDENT-FTI))
:<<=>> (= (STUDENT-FTI_DEPARTMENT ?STUDENT-FTI) ?DEPARTMENT))
(presume
(=> (STUDENT-fti ?STUDENT-fti)
(STUDENT-fti-DEPARTMENT "FTI" ?STUDENT-fti)))
;;(FASSERT STUDENT
;; (AKO ($VALUE (STUDENT-FTI)))
;; (STUDENT_ID ($REQUIRE (INTEGER :SLOT)))
;;).
(defconcept STUDENT ((?STUDENT-FTI STUDENT-FTI)))
(deffunction STUDENT_STUDENT_ID ((?STUDENT STUDENT)) :-> (?STUDENT_ID INTEGER))
(defrelation STUDENT-STUDENT_ID ((?STUDENT_ID INTEGER)(?STUDENT STUDENT))
:<<=>> (= (STUDENT_STUDENT_ID ?STUDENT) ?STUDENT_ID))
(defrelation STUDENT-NAME ((?NAME STRING)(?STUDENT STUDENT))
:<<=>> (= (HUMAN_NAME ?STUDENT) ?NAME))
(defrelation STUDENT-DEPARTMENT (?DEPARTMENT (?STUDENT STUDENT))
:<<=>> (= (STUDENT-FTI_DEPARTMENT ?STUDENT) ?DEPARTMENT))
;;(FINSTANTIATE 'STUDENT 'RIDWAN).
;;(FPUT 'RIDWAN 'NAME '$VALUE 'RIDWAN).
;;(FPUT 'RIDWAN 'CLASSIFICATION '$VALUE 'INDIVIDUAL).
;;(FPUT 'RIDWAN 'STUDENT_ID '$VALUE '13599066).
(assert (STUDENT ridwan))
(assert (STUDENT-NAME "ridwan" ridwan))
(assert (STUDENT-STUDENT_ID 13599066 ridwan))
;;(FINSTANTIATE 'STUDENT 'HERU).
;;(FPUT 'HERU 'NAME '$VALUE 'HERU).
;;(FPUT 'HERU 'CLASSIFICATION '$VALUE 'INDIVIDUAL).
;;(FPUT 'HERU 'STUDENT_ID '$VALUE '13599009).
(assert (STUDENT heru))
(assert (STUDENT-NAME "Heru S.H." Heru))
(assert (STUDENT-STUDENT_ID 13599009 heru))
;;===STOP
Then I do some information retrieval, such as this one... (from ";;===START"
until ";;===STOP"
;;===START
|= (RETRIEVE ALL (?x) (STUDENT ?x))
Warning: INTERNAL ERROR: DON'T KNOW YET HOW TO EQUATE THINGS BY DEFAULT.
Warning: INTERNAL ERROR: DON'T KNOW YET HOW TO EQUATE THINGS BY DEFAULT.
Warning: INTERNAL ERROR: DON'T KNOW YET HOW TO EQUATE THINGS BY DEFAULT.
Warning: INTERNAL ERROR: DON'T KNOW YET HOW TO EQUATE THINGS BY DEFAULT.
There are 2 solutions:
#1: ?X=HERU
#2: ?X=RIDWAN
;;===STOP
and also this one.... (from ";;===START" until ";;===STOP"
;;===START
|= (RETRIEVE ALL (?x) (STUDENT-DEPARTMENT "FTI" ?x))
There are 2 solutions:
#1: ?X=RIDWAN
#2: ?X=HERU
;;===STOP
That's the response. Eventhough there're error, but it works.
but after I assert this one, there's something I dont understand.
Why there's nobody who belong to "FTI" department. "Heru" should
be in "FTI" department, isn't he? There's still default value that
binds him to "FTI" department. (from ";;===START" until ";;===STOP"
;;===START
(assert (STUDENT-DEPARTMENT "FTSP" ridwan))
|= (RETRIEVE ALL (?x) (STUDENT-DEPARTMENT "FTI" ?x))
No solutions.
;;Where is Heru????
|= (RETRIEVE ALL (?x) (STUDENT-DEPARTMENT "FTSP" ?x))
There is 1 solution:
#1: ?X=RIDWAN
;;===STOP
But After I query one's more, here is the result....(from ";;===START" until
";;===STOP")
;;===START
|= (retrieve (?X) (student-department ?X heru))
Warning: INTERNAL ERROR: DON'T KNOW YET HOW TO EQUATE THINGS BY DEFAULT.
Warning: INTERNAL ERROR: DON'T KNOW YET HOW TO EQUATE THINGS BY DEFAULT.
There is 1 solution so far:
#1: ?X="FTI"
;;===STOP
Is the way I define the default value, which is
(presume
(=> (STUDENT-fti ?STUDENT-fti)
(STUDENT-fti-DEPARTMENT "FTI" ?STUDENT-fti)))
can't be applied to this definition? Or there's a bug in PowerLoom?
Thanx. It is fun to explore the "power" of PowerLoom.
--Ridwan