]> gitweb.factorcode.org Git - factor.git/commitdiff
graphs: change closure to use a set and operate on sequences.
authorJohn Benediktsson <mrjbq7@gmail.com>
Sat, 9 Mar 2013 01:53:31 +0000 (17:53 -0800)
committerJohn Benediktsson <mrjbq7@gmail.com>
Sat, 9 Mar 2013 01:53:31 +0000 (17:53 -0800)
core/classes/classes.factor
core/classes/tuple/tuple.factor
core/graphs/graphs-docs.factor
core/graphs/graphs-tests.factor
core/graphs/graphs.factor

index 6970f88767f57456c96b42c2022338c8cd6f784f..cdc34d1276964bde5b2648c7c16fe791e51d13fd 100644 (file)
@@ -130,9 +130,11 @@ GENERIC: implementors ( class/classes -- seq )
         tri
     ] { } make ;
 
-: class-usage ( class -- seq ) update-map get at ;
+: class-usage ( class -- seq )
+    update-map get at keys ;
 
-: class-usages ( class -- seq ) [ class-usage ] closure keys ;
+: class-usages ( class -- seq )
+    [ class-usage ] closure sets:members ;
 
 M: class implementors implementors-map get at sets:members ;
 
@@ -170,7 +172,7 @@ GENERIC: metaclass-changed ( use class -- )
 : check-metaclass ( class metaclass -- usages/f )
     over class? [
         over "metaclass" word-prop eq?
-        [ drop f ] [ class-usage keys ] if
+        [ drop f ] [ class-usage ] if
     ] [ 2drop f ] if ;
 
 : ?define-symbol ( word -- )
index 18a44409a560aa2038db38dc26b98ed0d68b6cff..895302eaa37469e03262380baba48614ec098eef 100644 (file)
@@ -298,7 +298,7 @@ PRIVATE>
 GENERIC: make-final ( class -- )
 
 M: tuple-class make-final
-    [ dup class-usage keys ?metaclass-changed ]
+    [ dup class-usage ?metaclass-changed ]
     [ t "final" set-word-prop ]
     bi ;
 
index a08a2a5bf93dce0144277af891cdb28a3f034368..7b6d20e7ba9501d202f4eb77a4ac063a5661be3a 100644 (file)
@@ -1,4 +1,5 @@
-USING: assocs hashtables help.markup help.syntax kernel sequences ;
+USING: assocs hashtables help.markup help.syntax kernel
+sequences sets ;
 IN: graphs
 
 ARTICLE: "graphs" "Directed graph utilities"
@@ -28,5 +29,5 @@ HELP: remove-vertex
 { $side-effects "graph" } ;
 
 HELP: closure
-{ $values { "obj" object } { "quot" { $quotation "( obj -- assoc )" } } { "assoc" "a new assoc" } }
+{ $values { "obj" object } { "quot" { $quotation "( obj -- assoc )" } } { "set" set } }
 { $description "Outputs a set of all vertices reachable from " { $snippet "vertex" } " via edges given by the quotation. The set always includes " { $snippet "vertex" } "." } ;
index 90b0e93b7cdbd156ecf2bfa4320c7773b772b57f..57424472e577ac3bb52825644ee2413088523e48 100644 (file)
@@ -1,4 +1,5 @@
 USING: graphs tools.test namespaces kernel sorting assocs ;
+FROM: sets => members ;
 
 H{ } "g" set
 { 1 2 3 } "v" set
@@ -14,7 +15,7 @@ H{
 } "g" set
 
 [ { 2 3 4 5 } ] [
-    2 [ "g" get at ] closure keys natural-sort 
+    2 [ "g" get at keys ] closure members natural-sort
 ] unit-test
 
 H{ } "g" set
index eed2a69c33ab9a378896bac2470c3a7d669e0312..29f38fc53a39719c3553288096368c5d58b1aa90 100644 (file)
@@ -31,15 +31,12 @@ PRIVATE>
 
 <PRIVATE
 
-: (closure) ( obj assoc quot: ( elt -- assoc ) -- )
-    2over key? [
-        3drop
-    ] [
-        2over conjoin [ dip ] keep
-        [ [ drop ] 3dip (closure) ] 2curry assoc-each
-    ] if ; inline recursive
+: (closure) ( obj set quot: ( elt -- seq ) -- )
+    2over ?adjoin [
+        [ dip ] keep [ (closure) ] 2curry each
+    ] [ 3drop ] if ; inline recursive
 
 PRIVATE>
 
-: closure ( obj quot -- assoc )
-    H{ } clone [ swap (closure) ] keep ; inline
+: closure ( obj quot -- set )
+    HS{ } clone [ swap (closure) ] keep ; inline