[cells-devel] can one make dependencies between models?
    Frank Goenninger 
    frgo at me.com
       
    Tue Apr 17 21:08:14 UTC 2012
    
    
  
Hi Mirko,
Am 17.04.2012 um 20:17 schrieb Mirko Vukovic:
> Hello,
> 
> I am doing very basic cell-stuff, much like the ones in the doc folder:  Not liking excel and its cousins, I am implementing spread-sheet like calculations in cells.
> 
> My question:
> 
> 1) Can I build two models (model1, model2) and specify that a slot in model2 depends on changes in some other slot in model1?
Sure:
(in-package #:cells)
;;; ------------------
;;; ***  Model M1  ***
;;; ------------------
  
(defmd m1 ()
  a
  b
  :a (c-in 1)
  :b (c-in 1))
(defobserver a ((self m1))
  (when new-value
    (format *debug-io* "~%~S: New value for slot a => ~S."
      self (a self))))
(defobserver b ((self m1))
  (when new-value
    (format *debug-io* "~%~S: New value for slot b => ~S."
      self (b self))))
(defmacro mk-m1 (id)
  `(make-instance 'm1
     :fm-parent *parent*
     :md-name ,id))
;;; ------------------
;;; ***  Model M2  ***
;;; ------------------
(defmd m2 ()
  (c (c? (let ((m1 (fm^ :m1)))   ;; -> fm^ searches for :m1 in the current family
           (* (a m1) (b m1))))))
(defmacro mk-m2 (id)
  `(make-instance 'm2
     :fm-parent *parent*
     :md-name ,id))
(defobserver c ((self m2))
  (when new-value
    (format *debug-io* "~%~S: New value for slot c => ~S."
      self (c self))))
;;; ------------------
;;; ***  Family M  ***
;;; ------------------
(defmd m (family)
  (kids (c? (the-kids
             (mk-m1 :m1)
             (mk-m2 :m2)))) ;; :m1 and :m2 are kids of :m's family.
  :md-name :m)
;;; -----------------
;;; ***  TESTING  ***
;;; -----------------
(defun m-test ()
  
  (let* ((self (make-instance 'm))
         (m1 (fm-find-kid self :m1)))
    
    ;; Step 1
    (format *debug-io* "~%~%STEP 1~&")
    (setf (a m1) 2)
    ;; => C = 2
    ;; See observer for C !
    
    ;; Step 2
    (format *debug-io* "~%~%STEP 2 ~&")
    (setf (b m1) 3))
    ;; => C = 6
    ;; See observer for C !
  
  (values))
> 2) Related: can I change a slot specification in a model.  For example from `c-in' to `c?'.  I assume that I can, but I would have to re-initialize the model somehow.  Correct? 
This one I'd like to leave for Kenny to answer ... Never did that during one run - I always reset cells via #'cells-reset and the started over when I needed to do that.
> I am also very interested in the question posted just a few minutes ago.  I would like to build an automated way of generating a GUI front end my cell models.
I tried to answer this in the other mail.
> 
> Thanks,
> 
> Mirko
Hope that helps.
Cheers
    Frank
    
    
More information about the cells-devel
mailing list