#+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
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).
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), !.