]> git.leonardobizzoni.com Git - ObjectOriented-Prolog-Lisp/commitdiff
Modificato replace per non utilizzare gli operatori OR e IfThen
authorkier-mirko <mirkotolentino1@gmail.com>
Sun, 24 Dec 2023 13:08:37 +0000 (14:08 +0100)
committerkier-mirko <mirkotolentino1@gmail.com>
Sun, 24 Dec 2023 13:08:37 +0000 (14:08 +0100)
Prolog/README.org
Prolog/oop.pl

index 2d612d65b29e6947f28046d72bbf795c63368186..8e8464beac30ce3c603218ae4ba18f9d33426094 100644 (file)
@@ -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
index bf01fdcbf26179afbd752b39f5a87460eee17a5a..bdd05373bba11c27432a81c7d28dfa371b04f31a 100644 (file)
@@ -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), !.