From: kier-mirko Date: Sun, 24 Dec 2023 13:08:37 +0000 (+0100) Subject: Modificato replace per non utilizzare gli operatori OR e IfThen X-Git-Url: http://git.leonardobizzoni.com/?a=commitdiff_plain;h=1e6adc00562ede1b2e812d90ae1e4ee26bb18602;p=ObjectOriented-Prolog-Lisp Modificato replace per non utilizzare gli operatori OR e IfThen --- diff --git a/Prolog/README.org b/Prolog/README.org index 2d612d6..8e8464b 100644 --- a/Prolog/README.org +++ b/Prolog/README.org @@ -298,15 +298,19 @@ call_method(Instance, ClassName, Body) :- #+end_src ** replace -#+begin_src prolog +#+begin_src prolog :tangle oop.pl replace(Subterm0, Subterm, Term0, Term) :- - ( Term0 == Subterm0 -> Term = Subterm - ; var(Term0) -> Term = Term0 - ; Term0 =.. [F|Args0], - maplist(replace(Subterm0,Subterm), Args0, Args), - Term =.. [F|Args] - ). - + Term0 == Subterm0, + !, + Term = Subterm. +replace(Subterm0, Subterm, Term0, Term) :- + var(Term0), + !, + Term = Term0. +replace(Subterm0, Subterm, Term0, Term) :- + Term0 =.. [F | Args0], + maplist(replace(Subterm0,Subterm), Args0, Args), + Term =.. [F | Args]. #+end_src ** check_value_type diff --git a/Prolog/oop.pl b/Prolog/oop.pl index bf01fdc..bdd0537 100644 --- a/Prolog/oop.pl +++ b/Prolog/oop.pl @@ -158,7 +158,7 @@ add_part(ClassName, [method(Name, ArgList, Body) | OtherParts]) :- Head =.. [Name, InstanceName | ArgList], !, replace(this,InstanceName,Body,NewBody), - asserta(Head :- (call_method(InstanceName,ClassName,NewBody))), + asserta(Head :- (call_method(InstanceName,ClassName, NewBody))), add_part(ClassName, OtherParts). @@ -203,12 +203,17 @@ call_method(Instance, ClassName, Body) :- retractall(is_instance(this, ClassName)))). replace(Subterm0, Subterm, Term0, Term) :- - ( Term0 == Subterm0 -> Term = Subterm - ; var(Term0) -> Term = Term0 - ; Term0 =.. [F|Args0], - maplist(replace(Subterm0,Subterm), Args0, Args), - Term =.. [F|Args] - ). + Term0 == Subterm0, + !, + Term = Subterm. +replace(Subterm0, Subterm, Term0, Term) :- + var(Term0), + !, + Term = Term0. +replace(Subterm0, Subterm, Term0, Term) :- + Term0 =.. [F | Args0], + maplist(replace(Subterm0,Subterm), Args0, Args), + Term =.. [F | Args]. check_value_type(nil, _X) :- !. check_value_type(var, X) :- var(X), !.