| 
									
										
										
										
											2009-01-26 00:04:35 -05:00
										 |  |  | ! Copyright (C) 2007, 2009 Mackenzie Straight, Doug Coleman, | 
					
						
							| 
									
										
										
										
											2013-09-18 21:17:45 -04:00
										 |  |  | ! Slava Pestov, John Benediktsson. | 
					
						
							| 
									
										
										
										
											2007-11-05 02:41:23 -05:00
										 |  |  | ! See http://factorcode.org/license.txt for BSD license. | 
					
						
							| 
									
										
										
										
											2015-10-15 09:16:57 -04:00
										 |  |  | USING: accessors combinators combinators.short-circuit deques fry | 
					
						
							|  |  |  | hashtables kernel kernel.private math math.order parser search-deques | 
					
						
							|  |  |  | sequences vocabs.loader ;
 | 
					
						
							| 
									
										
										
										
											2007-11-05 02:41:23 -05:00
										 |  |  | IN: dlists | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-11 20:33:31 -05:00
										 |  |  | TUPLE: dlist-link | 
					
						
							|  |  |  | { prev maybe{ dlist-link } } | 
					
						
							|  |  |  | { next maybe{ dlist-link } } ;
 | 
					
						
							| 
									
										
										
										
											2008-03-20 21:14:07 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-15 19:30:20 -05:00
										 |  |  | TUPLE: dlist-node < dlist-link obj ;
 | 
					
						
							| 
									
										
										
										
											2007-11-05 02:41:23 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-15 19:30:20 -05:00
										 |  |  | M: dlist-link obj>> ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-13 19:56:28 -04:00
										 |  |  | M: dlist-link node-value obj>> ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-15 19:30:20 -05:00
										 |  |  | : new-dlist-link ( obj prev next class -- node )
 | 
					
						
							|  |  |  |     new
 | 
					
						
							|  |  |  |         swap >>next | 
					
						
							|  |  |  |         swap >>prev | 
					
						
							|  |  |  |         swap >>obj ; inline
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-13 19:21:29 -04:00
										 |  |  | : <dlist-node> ( obj prev next -- dlist-node )
 | 
					
						
							| 
									
										
										
										
											2011-11-15 19:30:20 -05:00
										 |  |  |     \ dlist-node new-dlist-link ; inline
 | 
					
						
							| 
									
										
										
										
											2008-06-10 19:32:44 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-11-16 06:53:25 -05:00
										 |  |  | TUPLE: dlist | 
					
						
							| 
									
										
										
										
											2012-05-03 22:17:41 -04:00
										 |  |  | { front maybe{ dlist-link } } | 
					
						
							|  |  |  | { back maybe{ dlist-link } } ;
 | 
					
						
							| 
									
										
										
										
											2007-11-05 02:41:23 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-11-16 08:04:51 -05:00
										 |  |  | : <dlist> ( -- list )
 | 
					
						
							| 
									
										
										
										
											2008-11-16 06:53:25 -05:00
										 |  |  |     dlist new ; inline
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : <hashed-dlist> ( -- search-deque )
 | 
					
						
							|  |  |  |     20 <hashtable> <dlist> <search-deque> ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-04-01 20:05:32 -04:00
										 |  |  | M: dlist deque-empty? front>> not ; inline
 | 
					
						
							| 
									
										
										
										
											2008-11-16 06:53:25 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-02 22:07:37 -04:00
										 |  |  | M: dlist equal? | 
					
						
							|  |  |  |     over dlist? [ | 
					
						
							|  |  |  |         [ front>> ] bi@
 | 
					
						
							| 
									
										
										
										
											2012-07-21 13:22:44 -04:00
										 |  |  |         [ 2dup { [ and ] [ [ obj>> ] same? ] } 2&& ] | 
					
						
							| 
									
										
										
										
											2012-07-13 19:56:28 -04:00
										 |  |  |         [ [ next>> ] bi@ ] while
 | 
					
						
							| 
									
										
										
										
											2011-11-03 00:56:06 -04:00
										 |  |  |         or not
 | 
					
						
							| 
									
										
										
										
											2011-11-02 22:07:37 -04:00
										 |  |  |     ] [ | 
					
						
							|  |  |  |         2drop f
 | 
					
						
							|  |  |  |     ] if ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-11-05 02:41:23 -05:00
										 |  |  | : set-prev-when ( dlist-node dlist-node/f -- )
 | 
					
						
							| 
									
										
										
										
											2010-05-05 16:52:54 -04:00
										 |  |  |     [ prev<< ] [ drop ] if* ; inline
 | 
					
						
							| 
									
										
										
										
											2007-11-05 02:41:23 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | : set-next-when ( dlist-node dlist-node/f -- )
 | 
					
						
							| 
									
										
										
										
											2010-05-05 16:52:54 -04:00
										 |  |  |     [ next<< ] [ drop ] if* ; inline
 | 
					
						
							| 
									
										
										
										
											2007-11-05 02:41:23 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | : set-next-prev ( dlist-node -- )
 | 
					
						
							| 
									
										
										
										
											2008-11-16 06:53:25 -05:00
										 |  |  |     dup next>> set-prev-when ; inline
 | 
					
						
							| 
									
										
										
										
											2007-11-05 02:41:23 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-15 19:30:20 -05:00
										 |  |  | : set-prev-next ( dlist-node -- )
 | 
					
						
							|  |  |  |     dup prev>> set-next-when ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-11-05 02:41:23 -05:00
										 |  |  | : normalize-front ( dlist -- )
 | 
					
						
							| 
									
										
										
										
											2008-11-16 06:53:25 -05:00
										 |  |  |     dup back>> [ f >>front ] unless drop ; inline
 | 
					
						
							| 
									
										
										
										
											2007-11-05 02:41:23 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | : normalize-back ( dlist -- )
 | 
					
						
							| 
									
										
										
										
											2008-11-16 06:53:25 -05:00
										 |  |  |     dup front>> [ f >>back ] unless drop ; inline
 | 
					
						
							| 
									
										
										
										
											2007-11-05 02:41:23 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | : set-back-to-front ( dlist -- )
 | 
					
						
							| 
									
										
										
										
											2008-11-16 06:53:25 -05:00
										 |  |  |     dup back>> [ dup front>> >>back ] unless drop ; inline
 | 
					
						
							| 
									
										
										
										
											2007-11-05 02:41:23 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | : set-front-to-back ( dlist -- )
 | 
					
						
							| 
									
										
										
										
											2008-11-16 06:53:25 -05:00
										 |  |  |     dup front>> [ dup back>> >>front ] unless drop ; inline
 | 
					
						
							| 
									
										
										
										
											2007-11-05 02:43:29 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-10-17 21:57:21 -04:00
										 |  |  | : (dlist-find-node) ( ... dlist-node quot: ( ... node -- ... ? ) -- ... node/f )
 | 
					
						
							| 
									
										
										
										
											2008-03-20 21:14:07 -04:00
										 |  |  |     over [ | 
					
						
							| 
									
										
										
										
											2008-05-25 19:28:07 -04:00
										 |  |  |         [ call ] 2keep rot
 | 
					
						
							| 
									
										
										
										
											2011-10-17 21:57:21 -04:00
										 |  |  |         [ drop ] [ [ next>> ] dip (dlist-find-node) ] if
 | 
					
						
							|  |  |  |     ] [ 2drop f ] if ; inline recursive
 | 
					
						
							| 
									
										
										
										
											2007-11-05 02:43:29 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-10-17 21:57:21 -04:00
										 |  |  | : dlist-find-node ( ... dlist quot: ( ... node -- ... ? ) -- ... node/f )
 | 
					
						
							| 
									
										
										
										
											2008-11-29 14:29:19 -05:00
										 |  |  |     [ front>> ] dip (dlist-find-node) ; inline
 | 
					
						
							| 
									
										
										
										
											2007-11-05 02:43:29 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-10-17 21:57:21 -04:00
										 |  |  | : dlist-find-node-prev ( ... dlist quot: ( ... value -- ... ? ) -- ... obj/f ? )
 | 
					
						
							|  |  |  |     dlist-find-node [ prev>> ] [ f ] if* ; inline
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-09 02:38:10 -05:00
										 |  |  | : dlist-each-node ( ... dlist quot: ( ... node -- ... ) -- ... )
 | 
					
						
							| 
									
										
										
										
											2011-10-17 21:57:21 -04:00
										 |  |  |     '[ @ f ] dlist-find-node drop ; inline
 | 
					
						
							| 
									
										
										
										
											2007-11-05 02:43:29 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-06-10 19:32:44 -04:00
										 |  |  | : unlink-node ( dlist-node -- )
 | 
					
						
							| 
									
										
										
										
											2014-11-30 22:26:23 -05:00
										 |  |  |     [ prev>> ] [ next>> ] bi
 | 
					
						
							|  |  |  |     [ set-prev-when ] | 
					
						
							|  |  |  |     [ swap set-next-when ] 2bi ; inline
 | 
					
						
							| 
									
										
										
										
											2008-06-10 19:32:44 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-11 20:33:31 -05:00
										 |  |  | M: dlist push-front* | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         f swap <dlist-node> dup dup set-next-prev | 
					
						
							|  |  |  |     ] change-front set-back-to-front ;
 | 
					
						
							| 
									
										
										
										
											2007-11-05 02:41:23 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-13 19:21:29 -04:00
										 |  |  | : push-node-front ( dlist-node dlist -- )
 | 
					
						
							| 
									
										
										
										
											2014-12-11 20:33:31 -05:00
										 |  |  |     dupd [ >>next ] change-front | 
					
						
							|  |  |  |     [ set-next-prev ] [ set-back-to-front ] bi* ;
 | 
					
						
							| 
									
										
										
										
											2011-11-15 19:30:20 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-13 19:21:29 -04:00
										 |  |  | : push-node-back ( dlist-node dlist -- )
 | 
					
						
							| 
									
										
										
										
											2014-12-11 20:33:31 -05:00
										 |  |  |     dupd [ >>prev ] change-back | 
					
						
							|  |  |  |     [ set-prev-next ] [ set-front-to-back ] bi* ;
 | 
					
						
							| 
									
										
										
										
											2011-11-15 19:30:20 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-11 20:33:31 -05:00
										 |  |  | M: dlist push-back* | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         [ f <dlist-node> dup dup ] | 
					
						
							|  |  |  |         [ set-next-when ] bi
 | 
					
						
							|  |  |  |     ] change-back set-front-to-back ;
 | 
					
						
							| 
									
										
										
										
											2008-01-31 01:52:06 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-11 20:33:31 -05:00
										 |  |  | M: dlist peek-front* | 
					
						
							| 
									
										
										
										
											2011-11-08 16:20:56 -05:00
										 |  |  |     front>> [ obj>> t ] [ f f ] if* ;
 | 
					
						
							| 
									
										
										
										
											2008-05-25 21:43:17 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-11 20:33:31 -05:00
										 |  |  | M: dlist peek-back* | 
					
						
							| 
									
										
										
										
											2011-11-08 16:20:56 -05:00
										 |  |  |     back>> [ obj>> t ] [ f f ] if* ;
 | 
					
						
							| 
									
										
										
										
											2008-01-31 01:52:06 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-11 20:33:31 -05:00
										 |  |  | M: dlist pop-front* | 
					
						
							| 
									
										
										
										
											2008-05-25 21:43:17 -04:00
										 |  |  |     [ | 
					
						
							| 
									
										
										
										
											2014-12-11 20:33:31 -05:00
										 |  |  |         [ empty-deque ] unless*
 | 
					
						
							|  |  |  |         next>> | 
					
						
							|  |  |  |         f over set-prev-when | 
					
						
							|  |  |  |     ] change-front normalize-back ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: dlist pop-back* | 
					
						
							| 
									
										
										
										
											2008-05-25 21:43:17 -04:00
										 |  |  |     [ | 
					
						
							| 
									
										
										
										
											2014-12-11 20:33:31 -05:00
										 |  |  |         [ empty-deque ] unless*
 | 
					
						
							|  |  |  |         prev>> | 
					
						
							|  |  |  |         f over set-next-when | 
					
						
							|  |  |  |     ] change-back normalize-front ;
 | 
					
						
							| 
									
										
										
										
											2007-11-05 02:41:23 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-09 02:38:10 -05:00
										 |  |  | : dlist-find ( ... dlist quot: ( ... value -- ... ? ) -- ... obj/f ? )
 | 
					
						
							| 
									
										
										
										
											2011-10-17 21:57:21 -04:00
										 |  |  |     '[ obj>> @ ] dlist-find-node [ obj>> t ] [ f f ] if* ; inline
 | 
					
						
							| 
									
										
										
										
											2007-11-05 02:41:23 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-09 02:38:10 -05:00
										 |  |  | : dlist-any? ( ... dlist quot: ( ... value -- ... ? ) -- ... ? )
 | 
					
						
							| 
									
										
										
										
											2007-11-15 17:21:45 -05:00
										 |  |  |     dlist-find nip ; inline
 | 
					
						
							| 
									
										
										
										
											2007-11-05 02:41:23 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-11 20:33:31 -05:00
										 |  |  | M: dlist deque-member? | 
					
						
							| 
									
										
										
										
											2009-01-29 23:19:07 -05:00
										 |  |  |     [ = ] with dlist-any? ;
 | 
					
						
							| 
									
										
										
										
											2007-11-16 00:17:34 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-11 20:33:31 -05:00
										 |  |  | M: dlist delete-node | 
					
						
							| 
									
										
										
										
											2011-11-15 19:30:20 -05:00
										 |  |  |     [ | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             { [ 2dup front>> eq? ] [ nip pop-front* ] } | 
					
						
							|  |  |  |             { [ 2dup back>> eq? ] [ nip pop-back* ] } | 
					
						
							|  |  |  |             [ drop unlink-node ] | 
					
						
							|  |  |  |         } cond
 | 
					
						
							|  |  |  |     ] [ drop f >>prev f >>next drop ] 2bi ;
 | 
					
						
							| 
									
										
										
										
											2007-11-05 02:41:23 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-09 02:38:10 -05:00
										 |  |  | : delete-node-if* ( ... dlist quot: ( ... value -- ... ? ) -- ... obj/f ? )
 | 
					
						
							| 
									
										
										
										
											2008-03-20 21:14:07 -04:00
										 |  |  |     dupd dlist-find-node [ | 
					
						
							|  |  |  |         dup [ | 
					
						
							| 
									
										
										
										
											2008-06-10 19:32:44 -04:00
										 |  |  |             [ swap delete-node ] keep obj>> t
 | 
					
						
							| 
									
										
										
										
											2008-03-20 21:14:07 -04:00
										 |  |  |         ] [ | 
					
						
							|  |  |  |             2drop f f
 | 
					
						
							|  |  |  |         ] if
 | 
					
						
							| 
									
										
										
										
											2007-11-05 02:41:23 -05:00
										 |  |  |     ] [ | 
					
						
							| 
									
										
										
										
											2011-10-17 21:57:21 -04:00
										 |  |  |         drop f f
 | 
					
						
							|  |  |  |     ] if* ; inline
 | 
					
						
							| 
									
										
										
										
											2007-11-05 02:41:23 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-09 02:38:10 -05:00
										 |  |  | : delete-node-if ( ... dlist quot: ( ... value -- ... ? ) -- ... obj/f )
 | 
					
						
							| 
									
										
										
										
											2009-01-26 00:04:35 -05:00
										 |  |  |     '[ obj>> @ ] delete-node-if* drop ; inline
 | 
					
						
							| 
									
										
										
										
											2007-11-15 21:44:10 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-11 20:33:31 -05:00
										 |  |  | M: dlist clear-deque | 
					
						
							|  |  |  |     f >>front f >>back drop ;
 | 
					
						
							| 
									
										
										
										
											2008-02-06 20:23:39 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-15 09:16:57 -04:00
										 |  |  | : dlist-length ( dlist -- n )
 | 
					
						
							|  |  |  |     0 swap [ | 
					
						
							|  |  |  |         drop { fixnum } declare 1 + f
 | 
					
						
							|  |  |  |     ] dlist-find-node drop ; flushable
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-09 02:38:10 -05:00
										 |  |  | : dlist-each ( ... dlist quot: ( ... value -- ... ) -- ... )
 | 
					
						
							| 
									
										
										
										
											2009-01-26 00:04:35 -05:00
										 |  |  |     '[ obj>> @ ] dlist-each-node ; inline
 | 
					
						
							| 
									
										
										
										
											2007-11-05 11:01:11 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-13 18:53:38 -04:00
										 |  |  | : dlist>sequence ( dlist -- seq )
 | 
					
						
							| 
									
										
										
										
											2010-01-22 16:00:53 -05:00
										 |  |  |     [ ] collector [ dlist-each ] dip ;
 | 
					
						
							| 
									
										
										
										
											2008-11-11 11:56:58 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-13 18:15:14 -04:00
										 |  |  | : >dlist ( seq -- dlist )
 | 
					
						
							| 
									
										
										
										
											2011-10-27 18:17:49 -04:00
										 |  |  |     <dlist> [ '[ _ push-back ] each ] keep ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-12 12:58:47 -05:00
										 |  |  | : 1dlist ( obj -- dlist ) <dlist> [ push-front ] keep ;
 | 
					
						
							| 
									
										
										
										
											2008-06-10 19:32:44 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-09 02:38:10 -05:00
										 |  |  | : dlist-filter ( ... dlist quot: ( ... value -- ... ? ) -- ... dlist' )
 | 
					
						
							| 
									
										
										
										
											2014-12-11 20:33:31 -05:00
										 |  |  |     <dlist> [ | 
					
						
							|  |  |  |         '[ _ keep swap [ _ push-back ] [ drop ] if ] dlist-each | 
					
						
							|  |  |  |     ] keep ; inline
 | 
					
						
							| 
									
										
										
										
											2009-05-09 15:33:17 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-11-11 11:56:58 -05:00
										 |  |  | M: dlist clone | 
					
						
							| 
									
										
										
										
											2009-01-26 00:04:35 -05:00
										 |  |  |     <dlist> [ '[ _ push-back ] dlist-each ] keep ;
 | 
					
						
							| 
									
										
										
										
											2008-11-11 11:56:58 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-18 21:17:45 -04:00
										 |  |  | <PRIVATE
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : (push-before-node) ( obj dlist-node -- new-dlist-node )
 | 
					
						
							| 
									
										
										
										
											2014-12-11 20:33:31 -05:00
										 |  |  |     [ [ prev>> ] keep <dlist-node> dup ] keep
 | 
					
						
							|  |  |  |     [ dupd next<< ] change-prev drop ; inline
 | 
					
						
							| 
									
										
										
										
											2013-09-18 21:17:45 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | : push-before-node ( obj dlist-node dlist -- new-dlist-node )
 | 
					
						
							|  |  |  |     2dup front>> eq? [ | 
					
						
							|  |  |  |         nip push-front* | 
					
						
							|  |  |  |     ] [ | 
					
						
							|  |  |  |         drop (push-before-node) | 
					
						
							|  |  |  |     ] if ; inline
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | PRIVATE>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : push-before ( ... obj dlist quot: ( ... obj -- ... ? ) -- ... dlist-node )
 | 
					
						
							|  |  |  |     [ obj>> ] prepose over [ dlist-find-node ] dip swap
 | 
					
						
							|  |  |  |     [ swap push-before-node ] [ push-back* ] if* ; inline
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : push-sorted ( obj dlist -- dlist-node )
 | 
					
						
							| 
									
										
										
										
											2013-09-18 21:22:58 -04:00
										 |  |  |     dupd [ before? ] with push-before ; inline
 | 
					
						
							| 
									
										
										
										
											2013-09-18 21:17:45 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-08-19 15:06:20 -04:00
										 |  |  | INSTANCE: dlist deque | 
					
						
							| 
									
										
										
										
											2011-10-27 18:17:49 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-13 18:15:14 -04:00
										 |  |  | SYNTAX: DL{ \ } [ >dlist ] parse-literal ;
 | 
					
						
							| 
									
										
										
										
											2011-10-27 18:17:49 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | { "dlists" "prettyprint" } "dlists.prettyprint" require-when |