]> git.leonardobizzoni.com Git - ObjectOriented-Prolog-Lisp/commitdiff
Tagliato tutto a <80 colonne
authorLeonardoBizzoni <leo2002714@gmail.com>
Mon, 8 Jan 2024 15:43:02 +0000 (16:43 +0100)
committerLeonardoBizzoni <leo2002714@gmail.com>
Mon, 8 Jan 2024 15:43:02 +0000 (16:43 +0100)
Prolog/README.org

index ed36e478d17e849f49ff54ab6e6b0d0a18f773c0..7a949e45780a2fe048b8a2751b1e84009cecd1b8 100644 (file)
@@ -15,7 +15,9 @@ Definisce la struttura di una classe, dato:
 - una lista di genitori
 - una lista di `field`/`metodi`
 
-Per definire la def_class si inseriscono variabili che rappresentano ed i metodi che definiscono il comportamento della classe.
+Per definire la def_class si inseriscono variabili
+che rappresentano ed i metodi che definiscono il comportamento
+della classe.
 
 *** Implementazione
 #+begin_src prolog :tangle oop.pl
@@ -131,13 +133,18 @@ Istanzia una classe dato:
 
 Sostanzialmente craiamo il costruttore della classe.
 
-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.
+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.
+- 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
@@ -189,7 +196,10 @@ make(Instance, bar, [bar = "69"]). %% Instance = b; false.
 *** Definizione
 Assegna dinamicamente ed estrae il valore di un field di un'istanza.
 
-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.
+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
@@ -208,8 +218,12 @@ 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 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.
+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
@@ -229,8 +243,10 @@ fieldx(fb, [foo,bar,foobar], Result).
 
 ** inst
 *** Definizione
-Dato un oggetto che rappresenta un'istanza restituisce il nome dell'istanza.
-Si nella nostra implementazione è banale perchè l'oggetto che rappresenta l'istanza è il nome dell'istanza.
+Dato un oggetto che rappresenta un'istanza restituisce il nome
+dell'istanza.
+Si nella nostra implementazione è banale perchè l'oggetto che rappresenta
+l'istanza è il nome dell'istanza.
 
 *** Implementazione
 #+begin_src prolog :tangle oop.pl
@@ -247,7 +263,8 @@ inst(fb, root). %% false.
 
 * Predicati helper
 ** Predicati dinamici
-Predicati usati dal metodo /asserta/, svolgono una funzione di controllo per diverse entità.
+Predicati usati dal metodo /asserta/, svolgono una funzione di controllo
+per diverse entità.
 
 #+begin_src prolog :tangle oop.pl
 :- dynamic is_class/1.
@@ -258,14 +275,19 @@ Predicati usati dal metodo /asserta/, svolgono una funzione di controllo per div
 #+end_src
 
 ** Aggiunta di `field` e `metodi`
-Data una classe devo poter dire che un `field` appartiene alla classe che sto definendo.
-Se non ci sono `field`/`metodi` da bindare allora è finita la definizione delle parti della classe.
+Data una classe devo poter dire che un `field` appartiene alla classe
+che sto definendo.
+Se non ci sono `field`/`metodi` da bindare allora è finita la definizione
+delle parti della classe.
 
 #+begin_src prolog :tangle oop.pl
 add_part(ClassName, []) :- is_class(ClassName), !.
 #+end_src
 
-Se viene dato un `field` privo di tipo controlliamo che non sia già presente nella base di conoscenza e se lo è lo cancelliamo sennò facciamo il binding di classe e field dicendo che il tipo è `nil` e quindi dinamico(stile *python*).
+Se viene dato un `field` privo di tipo controlliamo che non sia già presente
+nella base di conoscenza e se lo è lo cancelliamo sennò facciamo il
+binding di classe e field dicendo che il tipo è `nil` e quindi
+dinamico(stile *python*).
 
 #+begin_src prolog :tangle oop.pl
 add_part(ClassName, [field(Name, Value) | OtherParts]) :-
@@ -292,7 +314,8 @@ add_part(ClassName, [field(Name, Value) | OtherParts]) :-
       add_part(ClassName, OtherParts).
 #+end_src
 
-Se invece viene dato un `field` come prima controlliamo se è già definito ma inoltre controlliamo che il `value` sia dello stesso tipo di `type`.
+Se invece viene dato un `field` come prima controlliamo se è già definito
+ma inoltre controlliamo che il `value` sia dello stesso tipo di `type`.
 
 #+begin_src prolog :tangle oop.pl
 add_part(ClassName, [field(Name, Value, Type) | OtherParts]) :-
@@ -324,7 +347,8 @@ add_part(ClassName, [field(Name, Value, Type) | OtherParts]) :-
       add_part(ClassName, OtherParts).
 #+end_src
 
-Se viene dato un `method` allora definiamo nella base di conoscenza un predicato `Name(InstanceName, ArgList)`.
+Se viene dato un `method` allora definiamo nella base di conoscenza un
+predicato `Name(InstanceName, ArgList)`.
 
 #+begin_src prolog :tangle oop.pl
 add_part(ClassName, [method(Name, ArgList, Body) | OtherParts]) :-
@@ -342,7 +366,8 @@ add_part(ClassName, [method(Name, ArgList, Body) | OtherParts]) :-
 #+end_src
 
 ** Impostazione dei field ereditati
-Mi dai una lista di `field` presi da una superclass e fai il binding anche con questa classe.
+Mi dai una lista di `field` presi da una superclass e fai il binding anche
+con questa classe.
 
 #+begin_src prolog :tangle oop.pl
 set_superclass_fields(_InstanceName, _ClassName, []) :- !.
@@ -357,7 +382,8 @@ set_superclass_fields(InstanceName,
 #+end_src
 
 ** Costruzione di un'istanza
-Fai il binding tra i `field` di un classe e quelli di un'istanza come `add_part`.
+Fai il binding tra i `field` di un classe e quelli di un'istanza come
+`add_part`.
 
 #+begin_src prolog :tangle oop.pl
 set_fields(_InstanceName, _ClassName, []) :- !.
@@ -392,7 +418,8 @@ set_fields(InstanceName, _ClassName, _Fields) :-
 
 ** Sostituzione del termine `this`
 
-Predicato che viene usato per sostituire 'this' con la vera istanza utilizzata (<Result>).
+Predicato che viene usato per sostituire 'this' con la vera istanza
+utilizzata (<Result>).
 
 #+begin_src prolog :tangle oop.pl
 replace(OldTerm, NewTerm, Body, NewTerm) :- Body == OldTerm, !.