(error "Il primo argomento della lista di methods ~S"
"deve essere il simbolo 'methods'")))
+ (create-methods classname (cdr methods))
(type-check-fields (cdr fields))
(inherit (list :classname classname
:type 'class
(field-name-exists name (rest fields)))))
#+end_src
+*** Creazione di metodi
+#+begin_src lisp :tangle ool.lisp
+(defun create-methods (classname methods)
+ (mapcar
+ (lambda (method)
+ (eval (list* 'defun
+ (first method)
+ (append '(inst) (second method))
+ (append '((unless (is-instance inst)
+ (error "~A non è un'istanza" inst)))
+ (cddr method)))))
+ methods))
+#+end_src
+
** Creazione di un'istanza
#+begin_src lisp :tangle ool.lisp
(defun create-instance (listclass new-fields)
(error "Il primo argomento della lista di methods ~S"
"deve essere il simbolo 'methods'")))
+ (create-methods classname (cdr methods))
(type-check-fields (cdr fields))
(inherit (list :classname classname
:type 'class
(or (equal name (first (first fields)))
(field-name-exists name (rest fields)))))
+(defun create-methods (classname methods)
+ (mapcar
+ (lambda (method)
+ (eval (list* 'defun
+ (first method)
+ (append '(inst) (second method))
+ (append '((unless (is-instance inst)
+ (error "~A non è un'istanza" inst)))
+ (cddr method)))))
+ methods))
+
(defun create-instance (listclass new-fields)
;; Se c'è almeno un field da cambiare
;; il cui nome non è una proprietà della classe