From: MetMattone <115347319+MetMattone@users.noreply.github.com> Date: Mon, 8 Jan 2024 21:21:32 +0000 (+0100) Subject: Update README.org X-Git-Url: http://git.leonardobizzoni.com/?a=commitdiff_plain;h=aced6b743160bc14a9abf161fc1640a6a4254399;p=ObjectOriented-Prolog-Lisp Update README.org ultime descrizioni della documentazione prolog aggiunte. --- diff --git a/Prolog/README.org b/Prolog/README.org index 7a949e4..4b9acd8 100644 --- a/Prolog/README.org +++ b/Prolog/README.org @@ -437,6 +437,10 @@ replace(OldTerm, NewTerm, Body, Result) :- #+end_src ** Controllo dei tipi + +Si definiscono i controlli dei tipi e delle classi con /type_check/. +Sono tutti dei semplici metodi di controllo, se la variabile è del tipo corrento viene restitituo true. + #+begin_src prolog :tangle oop.pl type_check(_X, nil) :- !. type_check(nil, _X) :- !. @@ -470,6 +474,10 @@ type_check(ClassName, Instance) :- ** Definizione di una classe *** Effettivo predicato `def_class` + +Defininiamo la classe, controllando che essa già non sia presente nella base di conoscenza ed +ereditiamo, se esistenti, field da una classe genitore. + #+begin_src prolog :tangle oop.pl wrapped_def_class(ClassName, Parents, Parts) :- nonvar(ClassName), @@ -483,6 +491,11 @@ wrapped_def_class(ClassName, Parents, Parts) :- #+end_src *** Ereditazione di field da superclass + +Metodo che permette di ereditare i campi dal genitore, +dopo aver verificato la presenza di una classe /Parent/, +si cercano i method del genitore e si aggiungono alla sottoclasse. + #+begin_src prolog :tangle oop.pl set_superclass(_ClassName, []) :- !. set_superclass(ClassName, [Parent | OtherParents]) :- @@ -504,6 +517,10 @@ set_superclass(ClassName, [Parent | OtherParents]) :- ** Istanziazione di una classe *** Effettivo predicato `make` + +Si crea l'effetiva classe, controllando i parametri d'ingrsso e inserendo i campi della classe. +Sia passati in ingresso che quelli ereditati da un eventuale genitore. + #+begin_src prolog :tangle oop.pl wrapped_make(InstanceName, ClassName, Fields) :- is_list(Fields), @@ -520,6 +537,9 @@ wrapped_make(InstanceName, ClassName, Fields) :- #+end_src *** Assegnamento dei valori ereditati dalla superclass all'istanza + +Vengono trovati e assegnati i field alla classe figlio. + #+begin_src prolog :tangle oop.pl instanciate_superclass(InstanceName, ClassName) :- %% Trova tutti i field della classe da istanziare @@ -533,6 +553,11 @@ instanciate_superclass(InstanceName, ClassName) :- #+end_src ** Ricerca di un'istanza + +Metodo per cercare un'istanza. +SI verifica che esista l'istanza e si controlla ricorsivamente la lista dei campi, +se l'istanza non ha field allora si controlla solo l'esistenza dell'istanza. + #+begin_src prolog :tangle oop.pl search_instance(InstanceName, ClassName, [=(Field,Value) | Other]) :- is_instance(InstanceName, ClassName),