From cadde9117c3267f58d01eb491d69de27502e7a09 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Wed, 6 Mar 2013 09:59:37 -0800 Subject: [PATCH] sets.extras: Initial checkin. Add setwise-xor word like setxor1d in numpy. --- extra/sets/extras/authors.txt | 1 + extra/sets/extras/extras-docs.factor | 25 +++++++++++++++++++++++++ extra/sets/extras/extras-tests.factor | 19 +++++++++++++++++++ extra/sets/extras/extras.factor | 7 +++++++ 4 files changed, 52 insertions(+) create mode 100644 extra/sets/extras/authors.txt create mode 100644 extra/sets/extras/extras-docs.factor create mode 100644 extra/sets/extras/extras-tests.factor create mode 100644 extra/sets/extras/extras.factor diff --git a/extra/sets/extras/authors.txt b/extra/sets/extras/authors.txt new file mode 100644 index 0000000000..7c1b2f2279 --- /dev/null +++ b/extra/sets/extras/authors.txt @@ -0,0 +1 @@ +Doug Coleman diff --git a/extra/sets/extras/extras-docs.factor b/extra/sets/extras/extras-docs.factor new file mode 100644 index 0000000000..cfde0569b6 --- /dev/null +++ b/extra/sets/extras/extras-docs.factor @@ -0,0 +1,25 @@ +! Copyright (C) 2013 Doug Coleman. +! See http://factorcode.org/license.txt for BSD license. +USING: help.markup help.syntax kernel sequences sets ; +IN: sets.extras + +HELP: setwise-xor +{ $values + { "seq0" sequence } { "seq1" sequence } + { "set" set } +} +{ $description "Converts the sequences to sets and takes the element-wise " { $link xor } ". Outputs elements that are in either set but not in both." } +{ $example + "USING: sets.extras prettyprint ;" + "{ 1 2 3 } { 2 3 4 } setwise-xor ." + "{ 1 4 }" +} +{ $notes "Known as setxor1d in numpy." } ; + +ARTICLE: "sets.extras" "Extra sets words" +"The " { $vocab-link "sets.extras" } " vocabulary is a collection of words related to sets." +$nl +"To take the element-wise xor of two sequences as if they were sets:" +{ $subsections setwise-xor } ; + +ABOUT: "sets.extras" diff --git a/extra/sets/extras/extras-tests.factor b/extra/sets/extras/extras-tests.factor new file mode 100644 index 0000000000..858945f651 --- /dev/null +++ b/extra/sets/extras/extras-tests.factor @@ -0,0 +1,19 @@ +! Copyright (C) 2013 Doug Coleman. +! See http://factorcode.org/license.txt for BSD license. +USING: tools.test sets.extras ; +IN: sets.extras.tests + +{ { } } +[ { } { } setwise-xor ] unit-test + +{ { 1 } } +[ { 1 } { } setwise-xor ] unit-test + +{ { 1 } } +[ { } { 1 } setwise-xor ] unit-test + +{ { } } +[ { 1 } { 1 } setwise-xor ] unit-test + +{ { 1 4 5 7 } } +[ { 1 2 3 2 4 } { 2 3 5 7 5 } setwise-xor ] unit-test diff --git a/extra/sets/extras/extras.factor b/extra/sets/extras/extras.factor new file mode 100644 index 0000000000..7b98c65745 --- /dev/null +++ b/extra/sets/extras/extras.factor @@ -0,0 +1,7 @@ +! Copyright (C) 2013 Doug Coleman. +! See http://factorcode.org/license.txt for BSD license. +USING: kernel sequences sets ; +IN: sets.extras + +: setwise-xor ( seq0 seq1 -- set ) + [ append members ] [ intersect ] 2bi diff ;