]> gitweb.factorcode.org Git - factor.git/commitdiff
Add deep-member? and deep-subseq? to sequences.deep.
authorDoug Coleman <doug.coleman@gmail.com>
Fri, 12 Dec 2008 05:11:04 +0000 (23:11 -0600)
committerDoug Coleman <doug.coleman@gmail.com>
Fri, 12 Dec 2008 05:11:04 +0000 (23:11 -0600)
basis/sequences/deep/authors.txt
basis/sequences/deep/deep-tests.factor
basis/sequences/deep/deep.factor

index f990dd0ed29ff1ada6887e18c53cbca2d40a2481..a07c427c988fa3d03d3581141483dfe092cdf39b 100644 (file)
@@ -1 +1,2 @@
 Daniel Ehrenberg
+Doug Coleman
index 522b5ecdf95a5f60472ba3773b327d4f8a0ee98d..2d3260f4279154a8cddb834b99efd2076a9bcad0 100644 (file)
@@ -24,3 +24,18 @@ IN: sequences.deep.tests
 [ "foo" ] [ "foo" [ string? ] deep-find ] unit-test
 
 [ { { 1 2 } 1 2 } ] [ [ { 1 2 } [ , ] deep-each ] { } make ] unit-test
+
+[ t ]
+[ { { 1 2 3 } 4 } { { { 1 { { 1 2 3 } 4 } } } 2 } deep-member? ] unit-test
+
+[ t ]
+[ { { 1 2 3 } 4 } { { { 1 2 3 } 4 } 2 } deep-member? ] unit-test
+
+[ f ]
+[ { 1 2 3 4 } { 1 2 3 { 4 } } deep-subseq? ] unit-test
+
+[ t ]
+[ { 1 2 3 4 } { 1 2 3 4 } deep-subseq? ] unit-test
+
+[ t ]
+[ { 1 2 3 4 } { { 1 2 3 4 } } deep-subseq? ] unit-test
index db572681a16c72f56d9721fbf3dc06aa5bf7a4c3..244040d60ac316a7e523ab411ed3b18ab9b7dfeb 100644 (file)
@@ -1,6 +1,6 @@
-! Copyright (C) 2007 Daniel Ehrenberg
+! Copyright (C) 2007, 2008 Daniel Ehrenberg, Doug Coleman.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: sequences kernel strings math ;
+USING: sequences kernel strings math fry ;
 IN: sequences.deep
 
 ! All traversal goes in postorder
@@ -38,6 +38,16 @@ M: object branch? drop f ;
 : deep-all? ( obj quot -- ? )
     [ not ] compose deep-contains? not ; inline
 
+: deep-member? ( obj seq -- ? )
+    swap '[
+        _ swap dup branch? [ member? ] [ 2drop f ] if
+    ] deep-find >boolean ;
+
+: deep-subseq? ( subseq seq -- ? )
+    swap '[
+        _ swap dup branch? [ subseq? ] [ 2drop f ] if
+    ] deep-find >boolean ;
+
 : deep-change-each ( obj quot: ( elt -- elt' ) -- )
     over branch? [
         [ [ call ] keep over [ deep-change-each ] dip ] curry change-each