** Creazione della classe in formato lista
#+begin_src lisp :tangle ool.lisp
(defun make-class (parents fields methods)
- (inherit (list :parents parents
+ (inherit (list :type 'class
+ :parents parents
:fields (cdr fields)
:methods (cdr methods)) parents))
#+end_src
(error "`~A` non è una classe" (car parents)))))
(defun merge-class (child super)
- (list :parents (merge-parents (getf super :parents)
+ (list :type 'class
+ :parents (merge-parents (getf super :parents)
(getf child :parents))
:fields (merge-parts (getf super :fields)
(getf child :fields))
** Stabilire se un simbolo è una classe
#+begin_src lisp :tangle ool.lisp
(defun is-class (name)
- (class-spec name))
+ (if (equal (getf (class-spec name) :type) 'class)
+ (class-spec name)
+ nil))
#+end_src
(gethash name *classes-specs*))
(defun make-class (parents fields methods)
- (inherit (list :parents parents
+ (inherit (list :type 'class
+ :parents parents
:fields (cdr fields)
:methods (cdr methods)) parents))
(error "`~A` non è una classe" (car parents)))))
(defun merge-class (child super)
- (list :parents (merge-parents (getf super :parents)
+ (list :type 'class
+ :parents (merge-parents (getf super :parents)
(getf child :parents))
:fields (merge-parts (getf super :fields)
(getf child :fields))
(field-name-exists name (rest fields)))))
(defun is-class (name)
- (class-spec name))
+ (if (equal (getf (class-spec name) :type) 'class)
+ (class-spec name)
+ nil))