From 8e9badd4f54e7d40f9276d340fdb6fd9a7bcee89 Mon Sep 17 00:00:00 2001 From: Maximilian Lupke Date: Mon, 20 Jul 2009 01:31:26 +0200 Subject: [PATCH 1/5] sequences.abbrev: Initial commit --- extra/sequences/abbrev/abbrev-tests.factor | 26 ++++++++++++++++++++++ extra/sequences/abbrev/abbrev.factor | 23 +++++++++++++++++++ extra/sequences/abbrev/authors.txt | 1 + 3 files changed, 50 insertions(+) create mode 100644 extra/sequences/abbrev/abbrev-tests.factor create mode 100644 extra/sequences/abbrev/abbrev.factor create mode 100644 extra/sequences/abbrev/authors.txt diff --git a/extra/sequences/abbrev/abbrev-tests.factor b/extra/sequences/abbrev/abbrev-tests.factor new file mode 100644 index 0000000000..6e6739e09a --- /dev/null +++ b/extra/sequences/abbrev/abbrev-tests.factor @@ -0,0 +1,26 @@ +USING: assocs sequences.abbrev tools.test ; +IN: sequences.abbrev.tests + +[ { "help" "hello" } ] [ + "he" { "apple" "hello" "help" } abbrev at +] unit-test + +[ f ] [ + "he" { "apple" "hello" "help" } unique-abbrev at +] unit-test + +[ { "apple" } ] [ + "a" { "apple" "hello" "help" } abbrev at +] unit-test + +[ { "apple" } ] [ + "a" { "apple" "hello" "help" } unique-abbrev at +] unit-test + +[ f ] [ + "a" { "hello" "help" } abbrev at +] unit-test + +[ f ] [ + "a" { "hello" "help" } unique-abbrev at +] unit-test diff --git a/extra/sequences/abbrev/abbrev.factor b/extra/sequences/abbrev/abbrev.factor new file mode 100644 index 0000000000..526737bd55 --- /dev/null +++ b/extra/sequences/abbrev/abbrev.factor @@ -0,0 +1,23 @@ +! 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 + +assoc ; + +: assoc-merge ( assoc1 assoc2 -- assoc3 ) + swap over '[ over _ at dup [ prepend ] [ drop ] if ] assoc-map assoc-union ; + +PRIVATE> + +: abbrev ( seqs -- assoc ) + [ (abbrev) ] map H{ } [ assoc-merge ] reduce ; + +: unique-abbrev ( seqs -- assoc ) + abbrev [ nip length 1 = ] assoc-filter ; diff --git a/extra/sequences/abbrev/authors.txt b/extra/sequences/abbrev/authors.txt new file mode 100644 index 0000000000..758ea89529 --- /dev/null +++ b/extra/sequences/abbrev/authors.txt @@ -0,0 +1 @@ +Maximilian Lupke From 52e09199e12be8c4a4e4f7c56a51099c84a2ceb8 Mon Sep 17 00:00:00 2001 From: Maximilian Lupke Date: Mon, 20 Jul 2009 01:40:20 +0200 Subject: [PATCH 2/5] sequences.abbrev: small refactoring --- extra/sequences/abbrev/abbrev.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extra/sequences/abbrev/abbrev.factor b/extra/sequences/abbrev/abbrev.factor index 526737bd55..bab8bb94b2 100644 --- a/extra/sequences/abbrev/abbrev.factor +++ b/extra/sequences/abbrev/abbrev.factor @@ -6,7 +6,7 @@ IN: sequences.abbrev assoc ; From e3ec2b6c8bbb018ebeeb58ffbe231281ebdc6ce1 Mon Sep 17 00:00:00 2001 From: Maximilian Lupke Date: Mon, 20 Jul 2009 17:22:55 +0200 Subject: [PATCH 3/5] sequences.abbrev: more small refactoring --- extra/sequences/abbrev/abbrev.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extra/sequences/abbrev/abbrev.factor b/extra/sequences/abbrev/abbrev.factor index bab8bb94b2..d5bba8951e 100644 --- a/extra/sequences/abbrev/abbrev.factor +++ b/extra/sequences/abbrev/abbrev.factor @@ -12,7 +12,7 @@ IN: sequences.abbrev [ prefixes ] keep 1array '[ _ ] H{ } map>assoc ; : assoc-merge ( assoc1 assoc2 -- assoc3 ) - swap over '[ over _ at dup [ prepend ] [ drop ] if ] assoc-map assoc-union ; + tuck '[ over _ at dup [ prepend ] [ drop ] if ] assoc-map assoc-union ; PRIVATE> From ea7cbd2b5afab52059973509c426d595d167a5c3 Mon Sep 17 00:00:00 2001 From: Maximilian Lupke Date: Mon, 20 Jul 2009 20:18:13 +0200 Subject: [PATCH 4/5] sequences.abbrev: keep insertion order --- extra/sequences/abbrev/abbrev-tests.factor | 2 +- extra/sequences/abbrev/abbrev.factor | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/extra/sequences/abbrev/abbrev-tests.factor b/extra/sequences/abbrev/abbrev-tests.factor index 6e6739e09a..39e445b495 100644 --- a/extra/sequences/abbrev/abbrev-tests.factor +++ b/extra/sequences/abbrev/abbrev-tests.factor @@ -1,7 +1,7 @@ USING: assocs sequences.abbrev tools.test ; IN: sequences.abbrev.tests -[ { "help" "hello" } ] [ +[ { "hello" "help" } ] [ "he" { "apple" "hello" "help" } abbrev at ] unit-test diff --git a/extra/sequences/abbrev/abbrev.factor b/extra/sequences/abbrev/abbrev.factor index d5bba8951e..6770a48a3a 100644 --- a/extra/sequences/abbrev/abbrev.factor +++ b/extra/sequences/abbrev/abbrev.factor @@ -12,7 +12,7 @@ IN: sequences.abbrev [ prefixes ] keep 1array '[ _ ] H{ } map>assoc ; : assoc-merge ( assoc1 assoc2 -- assoc3 ) - tuck '[ over _ at dup [ prepend ] [ drop ] if ] assoc-map assoc-union ; + tuck '[ over _ at dup [ append ] [ drop ] if ] assoc-map assoc-union ; PRIVATE> From 08814c33085f4901683c853abcf5913f4cf949a1 Mon Sep 17 00:00:00 2001 From: Maximilian Lupke Date: Tue, 21 Jul 2009 00:37:45 +0200 Subject: [PATCH 5/5] sequences.abbrev: add docs - not much, but a start --- extra/sequences/abbrev/abbrev-docs.factor | 28 +++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 extra/sequences/abbrev/abbrev-docs.factor diff --git a/extra/sequences/abbrev/abbrev-docs.factor b/extra/sequences/abbrev/abbrev-docs.factor new file mode 100644 index 0000000000..ae351914de --- /dev/null +++ b/extra/sequences/abbrev/abbrev-docs.factor @@ -0,0 +1,28 @@ +! Copyright (C) 2009 Maximilian Lupke. +! See http://factorcode.org/license.txt for BSD license. +USING: assocs help.markup help.syntax sequences ; +IN: sequences.abbrev + +HELP: abbrev +{ $values + { "seqs" sequence } + { "assoc" assoc } +} +{ $description "Calculates an assoc of { prefix sequence } pairs with prefix being an prefix of each element of sequence for each element in " { $snippet "seqs" } "." } ; + +HELP: unique-abbrev +{ $values + { "seqs" sequence } + { "assoc" assoc } +} +{ $description "Calculates an assoc of { prefix { sequence } } pairs with prefix being an unambiguous prefix of sequence in seqs." } ; + +ARTICLE: "sequences.abbrev" "Examples of abbrev usage" +"It is probably easiest to just run examples to understand abbrev." +{ $code + "{ \"hello\" \"help\" } abbrev" + "{ \"hello\" \"help\" } unique-abbrev" +} +; + +ABOUT: "sequences.abbrev"