From: LeonardoBizzoni Date: Sat, 23 Dec 2023 07:34:48 +0000 (+0100) Subject: Fixato chiamata ricorsiva di un metodo con `this` X-Git-Url: http://git.leonardobizzoni.com/?a=commitdiff_plain;h=185a1fce687d06d5f6a26f101eefee4025f2c9a7;p=ObjectOriented-Prolog-Lisp Fixato chiamata ricorsiva di un metodo con `this` --- diff --git a/Prolog/README.org b/Prolog/README.org index 499e417..ffc0f24 100644 --- a/Prolog/README.org +++ b/Prolog/README.org @@ -279,9 +279,11 @@ define_this([=(Key, Value) | Other]) :- #+begin_src prolog :tangle oop.pl call_method(Instance, ClassName, Body) :- is_instance(Instance, ClassName), + asserta(is_instance(this, ClassName)), define_this(Instance), - call(Body), - retractall(field(this, _, _)). + call_cleanup(call(Body), ( + retractall(is_instance(this, ClassName)), + retractall(field(this, _, _)))). #+end_src ** check_value_type diff --git a/Prolog/oop.pl b/Prolog/oop.pl index 97f659f..f42fa2b 100644 --- a/Prolog/oop.pl +++ b/Prolog/oop.pl @@ -207,9 +207,11 @@ define_this([=(Key, Value) | Other]) :- call_method(Instance, ClassName, Body) :- is_instance(Instance, ClassName), + asserta(is_instance(this, ClassName)), define_this(Instance), - call(Body), - retractall(field(this, _, _)). + call_cleanup(call(Body), ( + retractall(is_instance(this, ClassName)), + retractall(field(this, _, _)))). check_value_type(nil, _X) :- !. check_value_type(var, X) :- var(X), !.