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