:- abolish(is_instance/2).
:- abolish(field/3).
-def_class(ClassName, []) :- asserta(is_class(ClassName)), !.
+def_class(ClassName, []) :-
+ nonvar(ClassName),
+ asserta(is_class(ClassName)),
+ !.
def_class(ClassName, [Parent | OtherParents]) :-
+ nonvar(ClassName),
+ nonvar(Parent),
+ nonvar(OtherParents),
is_class(Parent),
asserta(is_child_of(Parent, ClassName)),
def_class(ClassName, OtherParents),
ParentParts),
add_part(ClassName, ParentParts).
-def_class(ClassName, [], []) :- def_class(ClassName, []), !.
+def_class(ClassName, [], []) :-
+ nonvar(ClassName),
+ def_class(ClassName, []),
+ !.
def_class(ClassName, Parents, Parts) :-
+ nonvar(ClassName),
+ nonvar(Parents),
+ nonvar(Parts),
def_class(ClassName, Parents),
add_part(ClassName, Parts).
#+end_src
#+begin_src prolog :tangle oop.pl
make(InstanceName, ClassName) :-
nonvar(InstanceName),
+ nonvar(ClassName),
!,
make(InstanceName, ClassName, []).
make(InstanceName, ClassName, []) :-
nonvar(InstanceName),
+ nonvar(ClassName),
is_class(ClassName),
\+ is_instance(InstanceName),
!,
make(InstanceName, ClassName, [Field | Other]) :-
nonvar(InstanceName),
+ nonvar(ClassName),
[Field | Other] = Fields,
!,
make(InstanceName, ClassName, []),
#+begin_src prolog :tangle oop.pl
make(InstanceName, ClassName) :-
var(InstanceName),
+ nonvar(ClassName),
!,
is_instance(InstanceName, ClassName).
make(InstanceName, ClassName, Fields) :-
var(InstanceName),
+ nonvar(ClassName),
is_list(Fields),
Fields \= [],
is_instance(InstanceName, ClassName),
:- abolish(is_instance/2).
:- abolish(field/3).
-def_class(ClassName, []) :- asserta(is_class(ClassName)), !.
+def_class(ClassName, []) :-
+ nonvar(ClassName),
+ asserta(is_class(ClassName)),
+ !.
def_class(ClassName, [Parent | OtherParents]) :-
+ nonvar(ClassName),
+ nonvar(Parent),
+ nonvar(OtherParents),
is_class(Parent),
asserta(is_child_of(Parent, ClassName)),
def_class(ClassName, OtherParents),
ParentParts),
add_part(ClassName, ParentParts).
-def_class(ClassName, [], []) :- def_class(ClassName, []), !.
+def_class(ClassName, [], []) :-
+ nonvar(ClassName),
+ def_class(ClassName, []),
+ !.
def_class(ClassName, Parents, Parts) :-
+ nonvar(ClassName),
+ nonvar(Parents),
+ nonvar(Parts),
def_class(ClassName, Parents),
add_part(ClassName, Parts).
make(InstanceName, ClassName) :-
nonvar(InstanceName),
+ nonvar(ClassName),
!,
make(InstanceName, ClassName, []).
make(InstanceName, ClassName, []) :-
nonvar(InstanceName),
+ nonvar(ClassName),
is_class(ClassName),
\+ is_instance(InstanceName),
!,
make(InstanceName, ClassName, [Field | Other]) :-
nonvar(InstanceName),
+ nonvar(ClassName),
[Field | Other] = Fields,
!,
make(InstanceName, ClassName, []),
make(InstanceName, ClassName) :-
var(InstanceName),
+ nonvar(ClassName),
!,
is_instance(InstanceName, ClassName).
make(InstanceName, ClassName, Fields) :-
var(InstanceName),
+ nonvar(ClassName),
is_list(Fields),
Fields \= [],
is_instance(InstanceName, ClassName),