/extra/sequences/abbrev/abbrev.factor

http://github.com/abeaumont/factor · Factor · 23 lines · 14 code · 7 blank · 2 comment · 2 complexity · 75f62af0cd87c7d4542a782fc50b7882 MD5 · raw file

  1. ! Copyright (C) 2009 Maximilian Lupke.
  2. ! See http://factorcode.org/license.txt for BSD license.
  3. USING: arrays assocs fry kernel math.ranges sequences ;
  4. IN: sequences.abbrev
  5. <PRIVATE
  6. : prefixes ( seq -- prefixes )
  7. dup length [1,b] [ head ] with map ;
  8. : (abbrev) ( seq -- assoc )
  9. [ prefixes ] keep 1array '[ _ ] H{ } map>assoc ;
  10. : assoc-merge ( assoc1 assoc2 -- assoc3 )
  11. [ '[ over _ at dup [ append ] [ drop ] if ] assoc-map ] keep swap assoc-union ;
  12. PRIVATE>
  13. : abbrev ( seqs -- assoc )
  14. [ (abbrev) ] map H{ } [ assoc-merge ] reduce ;
  15. : unique-abbrev ( seqs -- assoc )
  16. abbrev [ nip length 1 = ] assoc-filter ;