[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
file-compile problem/question
I am quite confused by the following difference in behavior I
experience between interpreted and compiled AKCL. Maybe somebody can
tell me whether this is a bug in my thinking or in KCL.
I define the object tree to be a 3-tuple of things: an atom, a
structure, and a list. The definitions can be seen below the following
transcript. I define a simple function to test for tree-hood:
(defun is-treep(tree)
  (and (listp tree)
       (eq (length tree) 3)
       (attribute-p (tree-attribute tree))))
make-tree is the constructor for an empty tree. 
Watch the following transcript:
AKCL (Austin Kyoto Common Lisp)  Version(1.605) Thu Nov 14 17:08:26 CST 1991
Contains Enhancements by W. Schelter
>(load "/home/mousetrap/Source/lisp/r1.23/Other/test.comp.lsp")
(load "/home/mousetrap/Source/lisp/r1.23/Other/test.comp.lsp")
Loading /home/mousetrap/Source/lisp/r1.23/Other/test.comp.lsp
Finished loading /home/mousetrap/Source/lisp/r1.23/Other/test.comp.lsp
T
>(setf x (make-tree))           ;;; set x to the empty tree
(EMPTY-TREE
    NIL NIL)
>(is-treep x)                   ;;; the empty tree is a tree
T                               ;;; in interpreted mode
>(load "/home/mousetrap/Source/lisp/r1.23/Other/test.comp.o")
Loading /home/mousetrap/Source/lisp/r1.23/Other/test.comp.o
start address -T 24644c Finished loading /home/mousetrap/Source/lisp/r1.23/Other/test.comp.o
608
>(setf x (make-tree))           ;;; x is again the empty tree
(EMPTY-TREE
    NIL NIL)
>(is-treep x)                   ;;; however, in compiled mode it 
NIL                             ;;; is not a tree
>(and
  (listp x) (eq (length x) 3) (attribute-p (tree-attribute x)))
T                               ;;; evaluating the body of is-treep
                                ;;; yields T, surprisingly enough
>(bye)
Bye.
The compiled file was generated using (compile-file ...); however, lc
does the same thing. 
My system runs on Sun3-80 und 4.0.1 OS; this happens in both 1.602 and
1.605. 
Any ideas?
Thanks, Thomas
P.S. The definitions used above:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; internal tree representation
;;;
;;; Trees are represented internally as 3 tuples of type 
;;; atom x attribute-type x list
;;; $1 indicates the grammatical type of the tree
;;; $2 is a structure holding attributes: type, parent, info, and attr
;;; $3 is the list of children of the tree
;;  definition of the attribute structure
(defstruct 
  (attribute (:print-function (lambda (x y z)
				(princ (attribute-type x) y))))
  (type nil) (parent nil) (info nil) (attr nil))
(defun tree-attribute(tr)
  (cadr tr))
(defun make-tree()
  (list 'empty-tree (make-attribute) nil))
;; type test
(defun is-treep(tree)
  (and (listp tree)
       (eq (length tree) 3)
       (attribute-p (tree-attribute tree))))