20dcf89f9a
git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1171 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
231 lines
3.1 KiB
Plaintext
231 lines
3.1 KiB
Plaintext
=================================================================
|
|
Logtalk - Object oriented extension to Prolog
|
|
Release 2.21.5
|
|
|
|
Copyright (c) 1998-2004 Paulo Moura. All Rights Reserved.
|
|
=================================================================
|
|
|
|
|
|
% start by loading the example:
|
|
|
|
| ?- logtalk_load(loader).
|
|
...
|
|
|
|
|
|
% create four bricks, all standing on the "ground" (use your imagination... ;-)
|
|
|
|
| ?- brick::new(a, [position-(8, 1)]).
|
|
yes
|
|
|
|
| ?- brick::new(b, [position-(6, 1)]).
|
|
yes
|
|
|
|
| ?- brick::new(c, [position-(4, 1)]).
|
|
yes
|
|
|
|
| ?- brick::new(d, [position-(2, 1)]).
|
|
yes
|
|
|
|
% set up ascii stack monitor so we can watch the bricks moving
|
|
|
|
| ?- after_event_registry::set_monitor(_, move(_,_), _, stack_monitor).
|
|
yes
|
|
|
|
|
|
% make the stack
|
|
|
|
| ?- brick_stack::add_tuple([c,d]).
|
|
|.c......
|
|
|.d...b.a
|
|
---------
|
|
yes
|
|
|
|
| ?- brick_stack::add_tuple([b,c]).
|
|
|.b......
|
|
|.c......
|
|
|.d.....a
|
|
---------
|
|
yes
|
|
|
|
| ?- brick_stack::add_tuple([a,b]).
|
|
|.a
|
|
|.b
|
|
|.c
|
|
|.d
|
|
---
|
|
yes
|
|
|
|
|
|
% check results
|
|
|
|
| ?- brick_stack::tuple(Tuple), write(Tuple), nl, fail.
|
|
[c,d]
|
|
[b,c]
|
|
[a,b]
|
|
no
|
|
|
|
| ?- before_event_registry::monitors(Mb), after_event_registry::monitors(Ma).
|
|
Ma = [brick_stack, stack_monitor]
|
|
Mb = [brick_stack]
|
|
yes
|
|
|
|
|
|
% move all stack to new position by moving bottom brick; check results
|
|
|
|
| ?- d::move(9, 1).
|
|
|.a.......
|
|
|.b.......
|
|
|.c.......
|
|
|........d
|
|
----------
|
|
|.a.......
|
|
|.b.......
|
|
|........c
|
|
|........d
|
|
----------
|
|
|.a.......
|
|
|........b
|
|
|........c
|
|
|........d
|
|
----------
|
|
|........a
|
|
|........b
|
|
|........c
|
|
|........d
|
|
----------
|
|
yes
|
|
|
|
| ?- a::position(Xa, Ya), b::position(Xb, Yb), c::position(Xc, Yc), d::position(Xd, Yd).
|
|
Xa = 9,
|
|
Xb = 9,
|
|
Xc = 9,
|
|
Xd = 9,
|
|
Ya = 4,
|
|
Yb = 3,
|
|
Yc = 2,
|
|
Yd = 1
|
|
yes
|
|
|
|
| ?- brick_stack::tuple(Tuple), write(Tuple), nl, fail.
|
|
[c,d]
|
|
[b,c]
|
|
[a,b]
|
|
no
|
|
|
|
|
|
% break stack in half by moving b to the "ground"; check results
|
|
|
|
| ?- b::move(3, 1).
|
|
|........a
|
|
|.........
|
|
|........c
|
|
|..b.....d
|
|
----------
|
|
|..a.....c
|
|
|..b.....d
|
|
----------
|
|
yes
|
|
|
|
| ?- a::position(Xa, Ya), b::position(Xb, Yb), c::position(Xc, Yc), d::position(Xd, Yd).
|
|
Xa = 3,
|
|
Xb = 3,
|
|
Xc = 9,
|
|
Xd = 9,
|
|
Ya = 2,
|
|
Yb = 1,
|
|
Yc = 2,
|
|
Yd = 1
|
|
yes
|
|
|
|
| ?- brick_stack::tuple(Tuple), write(Tuple), nl, fail.
|
|
[c,d]
|
|
[a,b]
|
|
no
|
|
|
|
|
|
% create new brick_stack tuple ; check results
|
|
|
|
| ?- brick_stack::add_tuple([d, a]).
|
|
|..d......
|
|
|..a.....c
|
|
|..b......
|
|
----------
|
|
|..c
|
|
|..d
|
|
|..a
|
|
|..b
|
|
----
|
|
yes
|
|
|
|
| ?- a::position(Xa, Ya), b::position(Xb, Yb), c::position(Xc, Yc), d::position(Xd, Yd).
|
|
Xa = 3,
|
|
Xb = 3,
|
|
Xc = 3,
|
|
Xd = 3,
|
|
Ya = 2,
|
|
Yb = 1,
|
|
Yc = 4,
|
|
Yd = 3
|
|
yes
|
|
|
|
| ?- brick_stack::tuple(Tuple), write(Tuple), nl, fail.
|
|
[c,d]
|
|
[a,b]
|
|
[d,a]
|
|
no
|
|
|
|
|
|
% move all stack to new position by moving bottom brick; check results
|
|
|
|
| ?- b::move(5, 1).
|
|
|..c..
|
|
|..d..
|
|
|..a..
|
|
|....b
|
|
------
|
|
|..c..
|
|
|..d..
|
|
|....a
|
|
|....b
|
|
------
|
|
|..c..
|
|
|....d
|
|
|....a
|
|
|....b
|
|
------
|
|
|....c
|
|
|....d
|
|
|....a
|
|
|....b
|
|
------
|
|
yes
|
|
|
|
| ?- a::position(Xa, Ya), b::position(Xb, Yb), c::position(Xc, Yc), d::position(Xd, Yd).
|
|
Xa = 5,
|
|
Xb = 5,
|
|
Xc = 5,
|
|
Xd = 5,
|
|
Ya = 2,
|
|
Yb = 1,
|
|
Yc = 4,
|
|
Yd = 3
|
|
yes
|
|
|
|
| ?- brick_stack::tuple(Tuple), write(Tuple), nl, fail.
|
|
[c,d]
|
|
[a,b]
|
|
[d,a]
|
|
no
|
|
|
|
|
|
% clean up instances, tuples and monitors
|
|
|
|
| ?- brick_stack::remove_all_tuples.
|
|
yes
|
|
|
|
| ?- after_event_registry::del_monitors(_, _, _, stack_monitor).
|
|
yes
|
|
|
|
| ?- brick::delete_all.
|
|
yes
|