]> gitweb.factorcode.org Git - factor.git/blobdiff - extra/benchmark/reverse-complement/reverse-complement.factor
factor: trim using lists
[factor.git] / extra / benchmark / reverse-complement / reverse-complement.factor
old mode 100755 (executable)
new mode 100644 (file)
index d83b720..6b1e5bd
@@ -1,54 +1,41 @@
-USING: io io.files io.streams.duplex kernel sequences
-sequences.private strings vectors words memoize splitting
-hints unicode.case continuations io.encodings.ascii ;
+! Copyright (C) 2006, 2008 Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+USING: ascii grouping hints io io.encodings.ascii io.files
+io.files.temp kernel sequences strings tr vectors ;
 IN: benchmark.reverse-complement
 
-MEMO: trans-map ( -- str )
-    256 >string
-    "TGCAAKYRMBDHV" "ACGTUMRYKVHDB"
-    [ pick set-nth ] 2each ;
-
-: do-trans-map ( str -- )
-    [ ch>upper trans-map nth ] change-each ;
-
-HINTS: do-trans-map string ;
+TR: trans-map ch>upper "ACGTUMRYKVHDB" "TGCAAKYRMBDHV" ;
 
 : translate-seq ( seq -- str )
-    concat dup reverse-here dup do-trans-map ;
+    concat reverse! dup trans-map-fast ;
 
 : show-seq ( seq -- )
-    translate-seq 60 <groups> [ print ] each ;
+    translate-seq 60 group [ print ] each ;
 
 : do-line ( seq line -- seq )
-    dup first ">;" memq? [
-        over show-seq print dup delete-all
-    ] [
-        over push
-    ] if ;
+    dup first ">;" member-eq?
+    [ over show-seq print dup delete-all ] [ suffix! ] if ;
 
 HINTS: do-line vector string ;
 
-: (reverse-complement) ( seq -- )
-    readln [ do-line (reverse-complement) ] [ show-seq ] if* ;
-
 : reverse-complement ( infile outfile -- )
-    ascii <file-writer> [
-        swap ascii <file-reader> [
-            swap <duplex-stream> [
-                500000 <vector> (reverse-complement)
-            ] with-stream
-        ] with-disposal
-    ] with-disposal ;
-
-: reverse-complement-in
+    ascii [
+        ascii [
+            500,000 <vector>
+            [ do-line ] each-line
+            show-seq
+        ] with-file-reader
+    ] with-file-writer ;
+
+: reverse-complement-in ( -- path )
     "reverse-complement-in.txt" temp-file ;
 
-: reverse-complement-out
+: reverse-complement-out ( -- path )
     "reverse-complement-out.txt" temp-file ;
 
-: reverse-complement-main ( -- )
+: reverse-complement-benchmark ( -- )
     reverse-complement-in
     reverse-complement-out
     reverse-complement ;
 
-MAIN: reverse-complement-main
+MAIN: reverse-complement-benchmark