Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %% library
- use_module(library(assoc)).
- proto((N, Slots), C, P) :- call(P, (H, Slots)), append([C], H, N).
- root(([root], Slots)) :- empty_assoc(Slots).
- add_attr((H, S), A, V, (H,N)) :- put_assoc(A, S, V, N).
- set_attr(O, A, V, N) :- add_attr(O, A, V, N).
- get_attr((_, Slots), A, V) :- get_assoc(A, Slots, V).
- isa(([C|_], _), C).
- isa(([_|Cs],_), C) :- isa((Cs,_), C).
- classof(([C|_],_), C).
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %% usage
- grand_parent(P) :- proto(P0, grand_parent, root),
- add_attr(P0, attr0, initial_value, P).
- parent(P) :- proto(P0, parent, grand_parent),
- add_attr(P0, answer, 42, P).
- son(P) :- proto(P0, son, parent),
- add_attr(P0, weight, 1, P).
- new_son(P) :- son(P0), set_attr(P0, answer, 0, P).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement