From: kier-mirko Date: Tue, 2 Jan 2024 15:50:54 +0000 (+0100) Subject: Fixato field* X-Git-Url: http://git.leonardobizzoni.com/?a=commitdiff_plain;h=868dc355bcda884f8d445f4ea2a6e21a34b56ef0;p=ObjectOriented-Prolog-Lisp Fixato field* --- diff --git a/Lisp/README.org b/Lisp/README.org index e97c4f0..d5da2c9 100644 --- a/Lisp/README.org +++ b/Lisp/README.org @@ -75,6 +75,8 @@ *** Implementazione #+begin_src lisp :tangle ool.lisp (defun field (instance field-name) + (unless (listp instance) + (error "~A non è un instanza") instance) (field-helper (getf instance :fields) field-name)) (defun field-helper (fields field-name) @@ -94,8 +96,7 @@ (defun field* (instance &rest fields) (cond ((null fields) nil) ((null (cdr fields)) (field instance (car fields))) - ((null (field instance (car fields))) nil) - (T (field* instance (cdr fields))))) + (T (field* (field instance (car fields)) (cdr fields))))) #+end_src *** Esempio pratico diff --git a/Lisp/ool.lisp b/Lisp/ool.lisp index c001367..55c4aa3 100644 --- a/Lisp/ool.lisp +++ b/Lisp/ool.lisp @@ -31,6 +31,8 @@ (copy-list (class-spec classname)))) (defun field (instance field-name) + (unless (listp instance) + (error "~A non è un instanza") instance) (field-helper (getf instance :fields) field-name)) (defun field-helper (fields field-name) @@ -41,8 +43,7 @@ (defun field* (instance &rest fields) (cond ((null fields) nil) ((null (cdr fields)) (field instance (car fields))) - ((null (field instance (car fields))) nil) - (T (field* instance (cdr fields))))) + (T (field* (field instance (car fields)) (cdr fields))))) (defparameter *classes-specs* (make-hash-table)) @@ -116,7 +117,7 @@ (defun field-name-exists (name fields) (if (null fields) nil - (or (eq name (first (first fields))) + (or (equal name (first (first fields))) (field-name-exists name (rest fields))))) (defun create-instance (listclass new-fields)