]> git.leonardobizzoni.com Git - ObjectOriented-Prolog-Lisp/commitdiff
Fixato `fieldx` e documentazione di `make`
authorLeonardoBizzoni <leo2002714@gmail.com>
Tue, 2 Jan 2024 14:06:13 +0000 (15:06 +0100)
committerLeonardoBizzoni <leo2002714@gmail.com>
Tue, 2 Jan 2024 14:06:13 +0000 (15:06 +0100)
Prolog/README.org

index 5cc6d1c636e6b8482500262316deb7905bf6dc9c..09e20388cb9e7bca3c08ed2db5c498279beef32c 100644 (file)
@@ -131,10 +131,13 @@ Istanzia una classe dato:
 
 Sostanzialmente craiamo il costruttore della classe.
 
-Se l'istanza non ha <Fields> allora si crea un istanza con una lista vuota.
-Se abbiamo il campo <Fields> 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 <FieldName>+ è una lista formata da un solo elemento, con un 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.
+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