]> git.leonardobizzoni.com Git - ObjectOriented-Prolog-Lisp/commitdiff
Aggiunto field e field*
authorkier-mirko <mirkotolentino1@gmail.com>
Tue, 2 Jan 2024 09:59:09 +0000 (10:59 +0100)
committerkier-mirko <mirkotolentino1@gmail.com>
Tue, 2 Jan 2024 09:59:09 +0000 (10:59 +0100)
Lisp/README.org
Lisp/ool.lisp

index b86bfd89dfe285886603e6f4f3bc5636b96f8fb8..84fa52811f981e8830e8ea33213c6f6ad472bb93 100644 (file)
 ** field
 *** Definizione
 
-
 *** Implementazione
 #+begin_src lisp :tangle ool.lisp
+(defun field (instance field-name)
+  (field-helper (getf instance :fields) field-name))
+
+(defun field-helper (fields field-name)
+  (cond ((null fields) nil)
+       ((eq (caar fields) field-name) (cadar fields))
+       (T (field-helper (cdr fields) field-name))))
 #+end_src
 
 *** Esempio pratico
 
 *** Implementazione
 #+begin_src lisp :tangle ool.lisp
+(defun field* (instance fields)
+  (cond ((null fields) nil)
+       ((null (cdr fields)) (field instance (car fields)))
+       ((null (field instance (car fields))) nil)
+       (T (field* instance (cdr fields)))))
 #+end_src
 
 *** Esempio pratico
index f1878c79d0e63d030353713dd1f101483f1c6194..c16e33b75a8e77dc154648ccb1ea34f457473d6f 100644 (file)
      (create-instance instance fields))
    (copy-list (class-spec classname))))
 
+(defun field (instance field-name)
+  (field-helper (getf instance :fields) field-name))
 
+(defun field-helper (fields field-name)
+  (cond ((null fields) nil)
+       ((eq (caar fields) field-name) (cadar fields))
+       (T (field-helper (cdr fields) field-name))))
 
-
+(defun field* (instance fields)
+  (cond ((null fields) nil)
+       ((null (cdr fields)) (field instance (car fields)))
+       ((null (field instance (car fields))) nil)
+       (T (field* instance (cdr fields)))))
 
 (defparameter *classes-specs* (make-hash-table))