]> gitweb.factorcode.org Git - factor.git/blob - extra/combinators/tuple/tuple.factor
c4e0ef40a147b94ea8fb862aaa9be81201ac5802
[factor.git] / extra / combinators / tuple / tuple.factor
1 ! (c)2009 Joe Groff bsd license
2 USING: accessors assocs classes.tuple generalizations kernel
3 locals quotations sequences ;
4 IN: combinators.tuple
5
6 <PRIVATE
7
8 :: (tuple-slot-quot) ( slot assoc n -- quot )
9     slot name>> assoc at [
10         slot initial>> :> initial
11         { n ndrop initial } >quotation
12     ] unless* ;
13
14 PRIVATE>
15
16 MACRO:: nmake-tuple ( class assoc n -- )
17     class all-slots [ assoc n (tuple-slot-quot) ] map :> quots
18     class <wrapper> :> \class
19     { quots n ncleave \class boa } >quotation ;
20     
21 : make-tuple ( x class assoc -- tuple )
22     1 nmake-tuple ; inline
23
24 : 2make-tuple ( x y class assoc -- tuple )
25     2 nmake-tuple ; inline
26
27 : 3make-tuple ( x y z class assoc -- tuple )
28     3 nmake-tuple ; inline
29