Head =.. [Name, InstanceName | ArgList],
!,
replace(this,InstanceName,Body,NewBody),
- asserta(Head :- (call_method(InstanceName, ClassName, NewBody))),
-
+ asserta(Head :- (is_instance(InstanceName, ClassName), NewBody),
add_part(ClassName, OtherParts).
#+end_src
check_fields(InstanceName, Other).
#+end_src
-** call_method
-#+begin_src prolog :tangle oop.pl
-call_method(Instance, ClassName, Body) :-
- is_instance(Instance, ClassName),
- asserta(is_instance(this, ClassName)),
- call_cleanup(call(Body), (
- retractall(is_instance(this, ClassName)))).
-#+end_src
-
** replace
#+begin_src prolog :tangle oop.pl
replace(Subterm0, Subterm, Term0, Term) :-
Term0 == Subterm0,
!,
Term = Subterm.
-replace(Subterm0, Subterm, Term0, Term) :-
+replace(_Subterm0, _Subterm, Term0, Term) :-
var(Term0),
!,
Term = Term0.
Head =.. [Name, InstanceName | ArgList],
!,
replace(this,InstanceName,Body,NewBody),
- asserta(Head :- (call_method(InstanceName,ClassName, NewBody))),
+ asserta(Head :- (is_instance(InstanceName, ClassName), NewBody)),
add_part(ClassName, OtherParts).
field(InstanceName, Field, Value),
check_fields(InstanceName, Other).
-call_method(Instance, ClassName, Body) :-
- is_instance(Instance, ClassName),
- asserta(is_instance(this, ClassName)),
- call_cleanup(call(Body), (
- retractall(is_instance(this, ClassName)))).
-
replace(Subterm0, Subterm, Term0, Term) :-
Term0 == Subterm0,
!,
Term = Subterm.
-replace(Subterm0, Subterm, Term0, Term) :-
+replace(_Subterm0, _Subterm, Term0, Term) :-
var(Term0),
!,
Term = Term0.