30 lines
728 B
Factor
30 lines
728 B
Factor
|
! (c)2009 Joe Groff bsd license
|
||
|
USING: accessors assocs classes.tuple generalizations kernel
|
||
|
locals quotations sequences ;
|
||
|
IN: combinators.tuple
|
||
|
|
||
|
<PRIVATE
|
||
|
|
||
|
:: (tuple-slot-quot) ( slot assoc n -- quot )
|
||
|
slot name>> assoc at [
|
||
|
slot initial>> :> initial
|
||
|
{ n ndrop initial } >quotation
|
||
|
] unless* ;
|
||
|
|
||
|
PRIVATE>
|
||
|
|
||
|
MACRO:: nmake-tuple ( class assoc n -- )
|
||
|
class all-slots [ assoc n (tuple-slot-quot) ] map :> quots
|
||
|
class <wrapper> :> \class
|
||
|
{ quots n ncleave \class boa } >quotation ;
|
||
|
|
||
|
: make-tuple ( x class assoc -- tuple )
|
||
|
1 nmake-tuple ; inline
|
||
|
|
||
|
: 2make-tuple ( x y class assoc -- tuple )
|
||
|
2 nmake-tuple ; inline
|
||
|
|
||
|
: 3make-tuple ( x y z class assoc -- tuple )
|
||
|
3 nmake-tuple ; inline
|
||
|
|