Category : Files from Magazines
Archive   : AIAPR87.ZIP
Filename : EXPERT.DEC

 
Output of file : EXPERT.DEC contained in archive : AIAPR87.ZIP

Code Taken from
'Expert's Toolbox' column
written by Jonathan Amsterdam
for the Dec. 1986 issue of AI EXPERT


"Retrieval from a Frame Data Base"


Listing 1


(DEFUN FMATCH (PATTERN FRAME)
;; Returns the frame if it matches the pattern; else, returns NIL.
(DO ((SLOTS-AND-VALUES PATTERN (CDR SLOTS-AND-VALUES)))
((NULL SLOTS-AND-VALUES) FRAME)
(LET* ((SLOT (CAAR SLOTS-AND-VALUES))
(PATTERN-VALUE (CADAR SLOTS-AND-VALUES))
(FRAME-VALUE (FGET FRAME SLOT)))
(IF (NOT (MEMBER PATTERN-VALUE FRAME-VALUE))
(RETURN NIL)))))



Listing 2


(DEFUN FMATCH (PATTERN FRAME)
;; Returns the frame if it matches the pattern; else, returns NIL.
(DO ((SLOTS-AND-VALUES PATTERN (CDR SLOTS-AND-VALUES)))
((NULL SLOTS-AND-VALUES) FRAME)
(LET ((SLOT (CAAR SLOTS-AND-VALUES)))
(IF (NOT (FMATCH-SLOT
(CADAR SLOTS-AND-VALUES)
(IF (EQ SLOT 'AKO)
(COLLECT-FACET-WITH-INHERITANCE FRAME SLOT 'VALUE)
(FGET FRAME SLOT))))
(RETURN NIL)))))

(DEFUN FMATCH-SLOT (PATTERN-VALUE FRAME-VALUE)
;; Returns non-NIL iff the pattern-value and the frame-value match.
(COND
((FUNCTIONP PATTERN-VALUE)
(FUNCALL PATTERN-VALUE FRAME-VALUE))
((ATOM PATTERN-VALUE)
(MEMBER PATTERN-VALUE FRAME-VALUE))
((EQ (CAR PATTERN-VALUE) 'NOT)
(NOT (FMATCH-SLOT (CADR PATTERN-VALUE) FRAME-VALUE)))
((EQ (CAR PATTERN-VALUE) 'OR)
(DOLIST (OR-ITEM (CDR PATTERN-VALUE))
(IF (FMATCH-SLOT OR-ITEM FRAME-VALUE)
(RETURN T))))
((EQ (CAR PATTERN-VALUE) 'AND)
(NOT (DOLIST (AND-ITEM (CDR PATTERN-VALUE))
(IF (NOT (FMATCH-SLOT AND-ITEM FRAME-VALUE))
(RETURN T)))))
(T
(MEMBER PATTERN-VALUE FRAME-VALUE :TEST #'FMATCH))))



  3 Responses to “Category : Files from Magazines
Archive   : AIAPR87.ZIP
Filename : EXPERT.DEC

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/