Problems with default value

[email protected]
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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.