| 
									
										
										
										
											2008-05-10 19:09:05 -04:00
										 |  |  | ! Copyright (C) 2004, 2008 Slava Pestov. | 
					
						
							|  |  |  | ! See http://factorcode.org/license.txt for BSD license. | 
					
						
							|  |  |  | USING: words sequences kernel assocs combinators classes | 
					
						
							| 
									
										
										
										
											2008-07-05 01:59:39 -04:00
										 |  |  | classes.algebra classes.builtin namespaces arrays math quotations ;
 | 
					
						
							| 
									
										
										
										
											2008-05-10 19:09:05 -04:00
										 |  |  | IN: classes.intersection | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | PREDICATE: intersection-class < class | 
					
						
							|  |  |  |     "metaclass" word-prop intersection-class eq? ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : intersection-predicate-quot ( members -- quot )
 | 
					
						
							| 
									
										
										
										
											2008-09-06 18:10:32 -04:00
										 |  |  |     [ | 
					
						
							|  |  |  |         [ drop t ] | 
					
						
							| 
									
										
										
										
											2008-05-10 19:09:05 -04:00
										 |  |  |     ] [ | 
					
						
							|  |  |  |         unclip "predicate" word-prop swap [ | 
					
						
							|  |  |  |             "predicate" word-prop [ dup ] swap [ not ] 3append
 | 
					
						
							|  |  |  |             [ drop f ] | 
					
						
							|  |  |  |         ] { } map>assoc alist>quot
 | 
					
						
							| 
									
										
										
										
											2008-09-06 18:10:32 -04:00
										 |  |  |     ] if-empty ;
 | 
					
						
							| 
									
										
										
										
											2008-05-10 19:09:05 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | : define-intersection-predicate ( class -- )
 | 
					
						
							|  |  |  |     dup participants intersection-predicate-quot define-predicate ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: intersection-class update-class define-intersection-predicate ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-11 03:12:36 -04:00
										 |  |  | : define-intersection-class ( class participants -- )
 | 
					
						
							| 
									
										
										
										
											2008-11-30 23:21:37 -05:00
										 |  |  |     [ [ f f ] dip intersection-class define-class ] | 
					
						
							| 
									
										
										
										
											2008-05-10 19:09:05 -04:00
										 |  |  |     [ drop update-classes ] | 
					
						
							|  |  |  |     2bi ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: intersection-class rank-class drop 2 ;
 | 
					
						
							| 
									
										
										
										
											2008-06-29 03:12:44 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | M: intersection-class instance? | 
					
						
							|  |  |  |     "participants" word-prop [ instance? ] with all? ;
 | 
					
						
							| 
									
										
										
										
											2008-07-05 18:08:01 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | M: intersection-class (flatten-class) | 
					
						
							|  |  |  |     participants <anonymous-intersection> (flatten-class) ;
 |