1 ! Copyright (C) 2004, 2008 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: words sequences kernel assocs combinators classes
4 namespaces arrays math quotations ;
7 PREDICATE: union-class < class
8 "metaclass" word-prop union-class eq? ;
10 : union-predicate-quot ( members -- quot )
14 unclip "predicate" word-prop swap [
15 "predicate" word-prop [ dup ] prepend
17 ] { } map>assoc alist>quot
20 : define-union-predicate ( class -- )
21 dup members union-predicate-quot define-predicate ;
23 M: union-class update-class define-union-predicate ;
25 : define-union-class ( class members -- )
26 [ f swap f union-class define-class ]
27 [ drop update-classes ]
30 M: union-class reset-class
31 { "class" "metaclass" "members" } reset-props ;
33 M: union-class rank-class drop 2 ;