]> git.leonardobizzoni.com Git - ObjectOriented-Prolog-Lisp/commitdiff
Fixato field*
authorkier-mirko <mirkotolentino1@gmail.com>
Tue, 2 Jan 2024 15:50:54 +0000 (16:50 +0100)
committerkier-mirko <mirkotolentino1@gmail.com>
Tue, 2 Jan 2024 15:50:54 +0000 (16:50 +0100)
Lisp/README.org
Lisp/ool.lisp

index e97c4f0b45aef5f549f6b20982dadf91ee592105..d5da2c9db23cf4f0caf505ebee105c108f2b5659 100644 (file)
@@ -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
index c00136723367ccc8fb832ce69fa00ae14c8fd745..55c4aa36fb841430d3099fba5ad20faceeb02007 100644 (file)
@@ -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))
 
 (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)