[cells-devel] Cells + CL-WHO: Strange behavior - your help needed ...

Ken Tilton kennytilton at optonline.net
Sun May 13 01:51:16 UTC 2007


Frank Goenninger wrote:
> Hi all:
> 
> I do have a strange behaviour of a small code snippet ...:
> (the used macro with-html-output is from CL-WHO - see 
> http://www.weitz.de/cl-who  - it generates HTML markup)
> 
> (defmacro as-html (&body body)
>   `(with-html-output (*standard-output*)
>      , at body))
> 
> (defmodel simple (family)
>   ((slot-1 :accessor slot-1 :initform (c-in nil) :initarg :slot-1))
>   (:default-initargs
>        :value (c? (as-html
>                                (:h1 (^slot-1))))))
> 
> Now when inspecting the result of
> 
> (make-instance 'simple :slot-1 "Hi")
> 
> I get no value back for slot-1 but simply see 
> 
> <h1></h1>
> 
> ... - what the f*ck am I doing wrong ???
> 
> Inspecting the instance reveals:
> 
> SIMPLE15 is a standard-object.
> [type: SIMPLE]
> --------------------
> Class: #<STANDARD-CLASS SIMPLE>
> .MD-STATE: :AWAKE
> .AWAKEN-ON-INIT-P: NIL
> .CELLS: ((.KIDS . =0/.KIDS/SIMPLE15]))
> .CELLS-FLUSHED: ((.VALUE . <vld>=1/.VALUE/SIMPLE15]))
> ADOPT-CT: 0
> .MD-NAME: SIMPLE15
> .FM-PARENT: NIL
> .VALUE: "</h1>"
> ZDBG: NIL
> .KID-SLOTS: NIL
> .KIDS: NIL
> SLOT-1: "Hallo"
> 
> Hunh? Slot ".value" is "</h1>" ?? 
> 
> Any help really appreciated ...

The first problem was writing the html to standard output instead of a 
string, the second problem is that cl-who does not quite work the way 
you think. What I did was replace as-html with the appropriate 
with-html-output form and then macroexpand. Give it a try. Meanwhile, 
this works:

(defpackage #:whofix
   (:use #:common-lisp #:cells #:cl-who))

(in-package :whofix)

(defmacro as-html (var &body body)
   `(with-output-to-string (,var)
      (with-html-output (,var)
        , at body)
      ))

(defmodel simple (family)
   ((slot-1 :accessor slot-1 :initform (c-in nil) :initarg :slot-1))
   (:default-initargs
       :value (c? (trc "enetering rule" (^slot-1))
                (as-html xxx
                  (:h1 (write-string (^slot-1) xxx))))))

(describe (make-instance 'simple :slot-1 "booters"))

;;;0>  4331 enetering rule "booters"
;;;SIMPLE8054 is an instance of #<STANDARD-CLASS SIMPLE>:
;;; The following slots have :INSTANCE allocation:
;;;  .MD-STATE           :AWAKE
;;;  .AWAKEN-ON-INIT-P   NIL
;;;  .CELLS              ((.KIDS . =0/.KIDS/SIMPLE8054]))
;;;  .CELLS-FLUSHED      ((.VALUE . <vld>=10966/.VALUE/SIMPLE8054]))
;;;  ADOPT-CT            0
;;;  .MD-NAME            SIMPLE8054
;;;  .FM-PARENT          NIL
;;;  .VALUE              "
;;;
;;;<h1>booters</h1>"
;;;  ZDBG                NIL
;;;  .KID-SLOTS          NIL
;;;  .KIDS               NIL
;;;  SLOT-1              "booters"



More information about the cells-devel mailing list