=================================================================
Logtalk - Object oriented extension to Prolog
Release 2.16.0

Copyright (c) 1998-2004 Paulo Moura.  All Rights Reserved.
=================================================================


% 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
