-
Notifications
You must be signed in to change notification settings - Fork 8
/
ltre.lisp
55 lines (41 loc) · 1.86 KB
/
ltre.lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
;;;; Modified: everett on Mon Mar 6 13:09:00 1995
;;;; LTRE -- a version of TRE which uses the LTMS
;;; Last edited 1/29/93, by KDF
;;; Copyright (c) 1989, 1990, 1991 Kenneth D. Forbus, Northwestern University,
;;; Johan de Kleer and Xerox Corporation.
;;; All rights reserved.
;;; See the file legal.txt for a paragraph stating scope of permission
;;; and disclaimer of warranty. The above copyright notice and that
;;; paragraph must be included in any separate copy of this file.
(in-package :COMMON-LISP-USER)
(defvar *ltre-path* (make-bps-path "ltms"))
;; Unless the ltre is placed in its own package, unexporting won't
;; do the trick, we have to unequivocally destroy rlet
#+MCL (unintern 'rlet (find-package :ccl))
(defparameter *ltre-files*
'("ltms" ;; LTMS
"linter" ;; Interface
"ldata" ;; Database
"lrules" ;; Rule system
"unify" ;; Unifier
"funify" ;; Open-coding of unification
"laccept" ;; shakedown tests for ltre
"cwa" ;; Closed-world assumption mechanism
"dds" ;; Dependency-directed search facility
"abduction" ;; Abduction mechanism (Ex 3 Ch 10)
"explain" ;; Find all antecedents by pattern matching
"forward-abduction" ;; Simplified abduction mechanism that gives only one (random) answer
))
(defparameter *set-rule-file* "setrule")
;;; The file setrule.lisp should also be compiled for efficiency.
;;; It can only be compiled after an LTRE has been created.
(defun load-ltre (&key (action :compile-if-newer))
(if (eq action :compile)
(compile-ltre)
(bps-load-files *ltre-path* *ltre-files* :action action)))
(defun compile-ltre ()
(bps-load-files *ltre-path* *ltre-files* :action :compile)
(unless (and (boundp '*ltre*)
(not (null *ltre*)))
(create-ltre "DUMMY"))
(bps-load-file (make-bps-path "ltms") *set-rule-file* :action :compile))