git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@53 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
		
			
				
	
	
		
			226 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			226 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
=================================================================
 | 
						|
Logtalk - Object oriented extension to Prolog
 | 
						|
Release 2.8.4
 | 
						|
 | 
						|
Copyright (c) 1998-2001 Paulo Moura.  All Rights Reserved.
 | 
						|
=================================================================
 | 
						|
 | 
						|
 | 
						|
 | 
						|
% 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
 |