From: kier-mirko Date: Tue, 2 Jan 2024 09:59:09 +0000 (+0100) Subject: Aggiunto field e field* X-Git-Url: http://git.leonardobizzoni.com/?a=commitdiff_plain;h=7305e23e0cf7ae43a8c086fc2bddb9b320f58210;p=ObjectOriented-Prolog-Lisp Aggiunto field e field* --- diff --git a/Lisp/README.org b/Lisp/README.org index b86bfd8..84fa528 100644 --- a/Lisp/README.org +++ b/Lisp/README.org @@ -60,9 +60,15 @@ ** 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 @@ -73,6 +79,11 @@ *** 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 diff --git a/Lisp/ool.lisp b/Lisp/ool.lisp index f1878c7..c16e33b 100644 --- a/Lisp/ool.lisp +++ b/Lisp/ool.lisp @@ -30,9 +30,19 @@ (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))