From 185a1fce687d06d5f6a26f101eefee4025f2c9a7 Mon Sep 17 00:00:00 2001 From: LeonardoBizzoni Date: Sat, 23 Dec 2023 08:34:48 +0100 Subject: [PATCH] Fixato chiamata ricorsiva di un metodo con `this` --- Prolog/README.org | 6 ++++-- Prolog/oop.pl | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) 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), !. -- 2.52.0