| 
									
										
										
										
											2010-01-20 06:44:34 -05:00
										 |  |  | ! Copyright (C) 2004, 2010 Slava Pestov. | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | ! See http://factorcode.org/license.txt for BSD license. | 
					
						
							| 
									
										
										
										
											2010-01-31 08:48:39 -05:00
										 |  |  | USING: classes classes.private classes.algebra | 
					
						
							|  |  |  | classes.algebra.private kernel namespaces make words sequences | 
					
						
							|  |  |  | quotations arrays kernel.private assocs combinators ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | IN: classes.predicate | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-03-26 19:23:19 -04:00
										 |  |  | PREDICATE: predicate-class < class | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  |     "metaclass" word-prop predicate-class eq? ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-20 06:44:34 -05:00
										 |  |  | <PRIVATE
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-07-17 18:41:33 -04:00
										 |  |  | GENERIC: predicate-quot ( class -- quot )
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: predicate-class predicate-quot | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  |     [ | 
					
						
							|  |  |  |         \ dup , | 
					
						
							| 
									
										
										
										
											2009-03-13 05:22:16 -04:00
										 |  |  |         [ superclass "predicate" word-prop % ] | 
					
						
							|  |  |  |         [ "predicate-definition" word-prop , ] bi
 | 
					
						
							|  |  |  |         [ drop f ] , \ if , | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  |     ] [ ] make ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-20 06:44:34 -05:00
										 |  |  | PRIVATE>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-03-26 19:23:19 -04:00
										 |  |  | : define-predicate-class ( class superclass definition -- )
 | 
					
						
							| 
									
										
										
										
											2008-05-10 19:09:05 -04:00
										 |  |  |     [ drop f f predicate-class define-class ] | 
					
						
							| 
									
										
										
										
											2008-04-02 03:44:10 -04:00
										 |  |  |     [ nip "predicate-definition" set-word-prop ] | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         2drop
 | 
					
						
							|  |  |  |         [ dup predicate-quot define-predicate ] | 
					
						
							|  |  |  |         [ update-classes ] | 
					
						
							|  |  |  |         bi
 | 
					
						
							| 
									
										
										
										
											2009-03-16 21:49:19 -04:00
										 |  |  |     ] 3tri ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | M: predicate-class reset-class | 
					
						
							| 
									
										
										
										
											2009-03-16 21:49:19 -04:00
										 |  |  |     [ call-next-method ] [ { "predicate-definition" } reset-props ] bi ;
 | 
					
						
							| 
									
										
										
										
											2008-05-02 03:51:38 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | M: predicate-class rank-class drop 1 ;
 | 
					
						
							| 
									
										
										
										
											2008-06-29 03:12:44 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | M: predicate-class instance? | 
					
						
							| 
									
										
										
										
											2009-03-16 21:49:19 -04:00
										 |  |  |     2dup superclass instance? [ | 
					
						
							|  |  |  |         "predicate-definition" word-prop call( object -- ? ) | 
					
						
							|  |  |  |     ] [ 2drop f ] if ;
 | 
					
						
							| 
									
										
										
										
											2008-07-05 01:59:39 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | M: predicate-class (flatten-class) | 
					
						
							|  |  |  |     superclass (flatten-class) ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: predicate-class (classes-intersect?) | 
					
						
							|  |  |  |     superclass classes-intersect? ;
 |