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.
|
2013-03-05 13:48:14 -05:00
|
|
|
USING: classes classes.algebra classes.algebra.private
|
|
|
|
classes.private kernel make words ;
|
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 ,
|
2011-11-22 02:00:52 -05:00
|
|
|
[ superclass predicate-def % ]
|
2009-03-13 05:22:16 -04:00
|
|
|
[ "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
|
|
|
|
2010-07-29 19:57:23 -04:00
|
|
|
M: predicate-class rank-class drop 2 ;
|
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? ;
|