From 7305e23e0cf7ae43a8c086fc2bddb9b320f58210 Mon Sep 17 00:00:00 2001 From: kier-mirko Date: Tue, 2 Jan 2024 10:59:09 +0100 Subject: [PATCH] Aggiunto field e field* --- Lisp/README.org | 13 ++++++++++++- Lisp/ool.lisp | 12 +++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) 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)) -- 2.52.0