| 
									
										
										
										
											2001-06-06 19:40:57 +00:00
										 |  |  | ================================================================= | 
					
						
							|  |  |  | Logtalk - Object oriented extension to Prolog | 
					
						
							| 
									
										
										
										
											2002-02-08 19:57:23 +00:00
										 |  |  | Release 2.9.3 | 
					
						
							| 
									
										
										
										
											2001-06-06 19:40:57 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-01-08 00:05:10 +00:00
										 |  |  | Copyright (c) 1998-2002 Paulo Moura.  All Rights Reserved. | 
					
						
							| 
									
										
										
										
											2001-06-06 19:40:57 +00:00
										 |  |  | ================================================================= | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | % 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 |