factor/core/classes/predicate/predicate.factor

50 lines
1.3 KiB
Factor
Raw Normal View History

! Copyright (C) 2004, 2010 Slava Pestov.
2007-09-20 18:09:08 -04:00
! See http://factorcode.org/license.txt for BSD license.
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? ;
<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 ,
[ superclass "predicate" word-prop % ]
[ "predicate-definition" word-prop , ] bi
[ drop f ] , \ if ,
2007-09-20 18:09:08 -04:00
] [ ] make ;
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
] 3tri ;
2007-09-20 18:09:08 -04:00
M: predicate-class reset-class
[ call-next-method ] [ { "predicate-definition" } reset-props ] bi ;
2008-05-02 03:51:38 -04:00
M: predicate-class rank-class drop 2 ;
M: predicate-class instance?
2dup superclass instance? [
"predicate-definition" word-prop call( object -- ? )
] [ 2drop f ] if ;
M: predicate-class (flatten-class)
superclass (flatten-class) ;
M: predicate-class (classes-intersect?)
superclass classes-intersect? ;