]> gitweb.factorcode.org Git - factor.git/blobdiff - basis/sequences/windowed/windowed.factor
factor: trim using lists
[factor.git] / basis / sequences / windowed / windowed.factor
index 5dd986cb19e6008d655d8184e62f3092bb5cd627..6300d379d77b5b035d617a6afe8d1195cd02b646 100644 (file)
@@ -1,25 +1,48 @@
 ! Copyright (C) 2012 Doug Coleman.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: accessors kernel math math.order sequences ;
+USING: accessors kernel math math.order math.statistics
+sequences sequences.private ;
 IN: sequences.windowed
 
-TUPLE: windowed-sequence { sequence sequence read-only } { n integer } ;
+TUPLE: windowed-sequence
+    { sequence sequence read-only }
+    { n integer } ;
 
 INSTANCE: windowed-sequence sequence
 
 C: <windowed-sequence> windowed-sequence
-        
+
+M: windowed-sequence nth-unsafe
+    [ 1 + ] dip [ n>> dupd [-] swap ] [ sequence>> ] bi <slice> ; inline
+
+M: windowed-sequence length
+    sequence>> length ; inline
+
 : in-bound ( n sequence -- n' )
     [ drop 0 ] [ length ] bi clamp ; inline
 
 : in-bounds ( a b sequence -- a' b' sequence )
-    [ nip in-bound ]
-    [ [ nip ] dip in-bound ]
-    [ 2nip ] 3tri ;
-    
-M: windowed-sequence nth
-    [ [ 1 + ] dip n>> [ - ] [ drop ] 2bi ]
-    [ nip sequence>> in-bounds <slice> ] 2bi ;
-    
-M: windowed-sequence length
-    sequence>> length ;
\ No newline at end of file
+    [ nip in-bound ] [ nipd in-bound ] [ 2nip ] 3tri ;
+
+:: rolling-map ( ... seq n quot: ( ... slice -- ... elt ) -- ... newseq )
+    seq length [
+        1 + [ n [-] ] [ seq <slice-unsafe> ] bi quot call
+    ] { } map-integers ; inline
+
+: rolling-sum ( seq n -- newseq )
+    [ sum ] rolling-map ;
+
+: rolling-mean ( seq n -- newseq )
+    [ mean ] rolling-map ;
+
+: rolling-median ( seq n -- newseq )
+    [ median ] rolling-map ;
+
+: rolling-supremum ( seq n -- newseq )
+    [ supremum ] rolling-map ;
+
+: rolling-infimum ( seq n -- newseq )
+    [ infimum ] rolling-map ;
+
+: rolling-count ( ... u n quot: ( ... elt -- ... ? ) -- ... v )
+    '[ _ count ] rolling-map ; inline