================================================================= Logtalk - Object oriented extension to Prolog Release 2.21.1 Copyright (c) 1998-2004 Paulo Moura. All Rights Reserved. ================================================================= % start by loading the example: | ?- logtalk_load(loader). ... % first create four polygons and move each one to a different position | ?- triangle::new(t, [position-(4, 5)]). yes | ?- square::new(s, [position-(3, 2)]). yes | ?- pentagon::new(p, [position-(7, 1)]). yes | ?- hexagon::new(h, [position-(2, 4)]). yes % create two tuples of relation concentric | ?- concentric::add_tuple([t, s]). yes | ?- concentric::add_tuple([p, h]). yes % check results | ?- concentric::tuple(Tuple), write(Tuple), nl, fail. [t,s] [p,h] no | ?- t::position(Xt, Yt), s::position(Xs, Ys), p::position(Xp, Yp), h::position(Xh, Yh). Xh = 7, Yh = 1, Xp = 7, Xs = 4, Xt = 4, Yp = 1, Ys = 5, Yt = 5 yes | ?- after_event_registry::monitors(Ma). Ma = [concentric] yes % move triangle to a new position | ?- t::move(3, 3). yes % move the hexagon to a new position | ?- h::move(8, 4). yes % check results | ?- concentric::tuple(Tuple), write(Tuple), nl, fail. [t,s] [p,h] no | ?- t::position(Xt, Yt), s::position(Xs, Ys), p::position(Xp, Yp), h::position(Xh, Yh). Xh = 8, Yh = 4, Xp = 8, Xs = 3, Xt = 3, Yp = 4, Ys = 3, Yt = 3 yes | ?- after_event_registry::monitors(Ma). Ma = [concentric] yes % create another tuple of relation concentric | ?- concentric::add_tuple([t, p]). yes % move the pentagon to a new position | ?- p::move(2, 7). yes % check results | ?- concentric::tuple(Tuple), write(Tuple), nl, fail. [t,s] [p,h] [t,p] no | ?- t::position(Xt, Yt), s::position(Xs, Ys), p::position(Xp, Yp), h::position(Xh, Yh). Xh = 2, Yh = 7, Xp = 2, Xs = 2, Xt = 2, Yp = 7, Ys = 7, Yt = 7 yes | ?- after_event_registry::monitors(Monitors). Monitors = [concentric] yes % clean up instances, tuples and monitors | ?- concentric::remove_all_tuples. yes | ?- triangle::delete(t). yes | ?- square::delete(s). yes | ?- pentagon::delete(p). yes | ?- hexagon::delete(h). yes