From 7dc8178ba3871b503e09f5bd4e33e9ab4f0c8c22 Mon Sep 17 00:00:00 2001 From: LeonardoBizzoni Date: Tue, 2 Jan 2024 15:06:13 +0100 Subject: [PATCH] Fixato `fieldx` e documentazione di `make` --- Prolog/README.org | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/Prolog/README.org b/Prolog/README.org index 5cc6d1c..09e2038 100644 --- a/Prolog/README.org +++ b/Prolog/README.org @@ -131,10 +131,13 @@ Istanzia una classe dato: Sostanzialmente craiamo il costruttore della classe. -Se l'istanza non ha allora si crea un istanza con una lista vuota. -Se abbiamo il campo dobbiamo prima controllare che non esista già la stessa istanza. -Se esiste non si procede con l'operazione, in quanto rindondante, in caso contrario si passa alla creazione effettiva del metodo. -Se fallisce la creazione del metodo si elimanano le eventuali informazioni residue dalla base di conoscenza. +Prima di creare l'istanza si controlla che l'atono non sia già un'istanza di una classe. +Se esiste non si procede con l'operazione, in quanto rindondante, in caso contrario si passa alla creazione effettiva dell'istanza. + +Dopo di che: +- Se non viene dato il campo /Fields/ allora si crea un istanza con i valore di default della classe. +- Se abbiamo il campo /Fields/ associamo ai fields dell'istanza i valori di default e successivamente quelli presenti in /Fields/. +- Se fallisce la creazione dell'istanza si elimanano le eventuali informazioni residue dalla base di conoscenza. *** Implementazione @@ -184,10 +187,9 @@ make(Instance, bar, [bar = "69"]). %% Instance = b; false. ** field *** Definizione -Estrae il valore di una classe da un campo. +Assegna dinamicamente ed estrae il valore di un field di un'istanza. -Questa funzione svolge lo stesso compito di un getter, -ovvero una funzione che fornisce un modo controllato per accedere al valore di un attributo, all'interno di una classe. +Questa funzione svolge lo stesso compito di un getter/setter in un *inferiore* linguaggio ad oggetti, ovvero una funzione che fornisce un modo controllato per accedere al valore di un attributo all'interno di un'istanza. *** Implementazione #+begin_src prolog :tangle oop.pl @@ -206,8 +208,8 @@ field(root, value, X). %% X = 200 ** fieldx *** Definizione Estrae il valore dalla classe percorrendo una catena di attributi. -Il caso base del metodo è quando + è una lista formata da un solo elemento, con un field possiamo estrattre l'ultimo (e solo) valore di + -Se + ha più elementi possiamo richiamare il metodo ricorsivamente sulla coda della lista finchè la lista non avrà un solo elemento riportandoci al caso base. +Il caso base del metodo è quando /FieldName/ è una lista formata da un solo elemento, con il predicato /field/ possiamo estrattre l'ultimo (e solo) valore di /FieldName./ +Se /FieldName/ ha più elementi possiamo richiamare il metodo ricorsivamente sulla coda della lista finchè la lista non avrà un solo elemento riportandoci al caso base. *** Implementazione #+begin_src prolog :tangle oop.pl @@ -216,8 +218,8 @@ fieldx(Instance, [FieldName], Res) :- !. fieldx(Instance, [FieldName | Others], Res) :- is_instance(Instance), - field(Instance, FieldName, _Value), - fieldx(Instance, Others, Res). + field(Instance, FieldName, Value), + fieldx(Value, Others, Res). #+end_src *** Esempio pratico -- 2.52.0