This repository has been archived on 2023-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
yap-6.3/Logtalk/examples/bricks/SCRIPT

244 lines
3.4 KiB
Plaintext
Raw Normal View History

=================================================================
Logtalk - Object oriented extension to Prolog
Release 2.22.3
Copyright (c) 1998-2004 Paulo Moura. All Rights Reserved.
=================================================================
% start by loading the necessary library and support example files (if not
% already loaded):
| ?- logtalk_load(library(all_loader)).
...
| ?- logtalk_load(roots(loader)).
...
| ?- logtalk_load(relations(loader)).
...
% now you are ready for loading the example:
| ?- logtalk_load(bricks(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