* Predicati helper
** Predicati dinamici
-Predicati usati con `assert` guarda dove vengono usati e scrivi 2 righe.
+Predicati usati dal metodo /asserta/, svolgono una funzione di controllo per diverse entità.
#+begin_src prolog :tangle oop.pl
:- dynamic is_class/1.
add_part(ClassName, OtherParts).
#+end_src
-Se viene dato un `method` allora chiedi a Mirko come funzione sta stregoneria.
-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]) :-
#+end_src
** Sostituzione del termine `this`
-Magia nera chiedi a Mirko.
+
+Nel primo caso se <Body> è uguale a <OldTerm> restitisci <NewTerm>.
+Nel secondo caso se <Body> è variabile restituiscila.
+Nel terzo caso <Body> viene trasformato in Funtore(BodyArgs), per poi richiamare ricorsivamente gli argomenti di <Body>.
+Infine si ricostruisce <Result> con il predicato univ e viene restituito.
+
#+begin_src prolog :tangle oop.pl
replace(OldTerm, NewTerm, Body, NewTerm) :- Body == OldTerm, !.