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
							 |