/extra/combinators/tuple/tuple.factor

http://github.com/abeaumont/factor · Factor · 29 lines · 20 code · 8 blank · 1 comment · 1 complexity · 0ce6565de6ade4aba3850d5a773e146e MD5 · raw file

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