]> gitweb.factorcode.org Git - factor.git/blobdiff - extra/spelling/spelling.factor
factor: trim using lists
[factor.git] / extra / spelling / spelling.factor
index 22b6024db9569cb77544c5dcb1cfdcb032cb610d..66b0a38fddf2cd9cc95044d4b83afb68e88b7799 100644 (file)
@@ -1,7 +1,9 @@
-USING: arrays ascii assocs combinators combinators.smart fry
+! Copyright (C) 2010 John Benediktsson
+! See http://factorcode.org/license.txt for BSD license
+USING: arrays ascii assocs combinators combinators.smart
 http.client io.encodings.ascii io.files io.files.temp kernel
-literals locals math math.ranges math.statistics memoize
-sequences sequences.private sets sorting splitting strings urls ;
+math math.statistics ranges sequences sequences.private sorting
+splitting urls ;
 IN: spelling
 
 ! http://norvig.com/spell-correct.html
@@ -9,26 +11,22 @@ IN: spelling
 CONSTANT: ALPHABET "abcdefghijklmnopqrstuvwxyz"
 
 : deletes ( word -- edits )
-    [ length iota ] keep '[ _ remove-nth ] map ;
+    [ length <iota> ] keep '[ _ remove-nth ] map ;
 
 : transposes ( word -- edits )
-    [ length [1,b) ] keep '[
-        dup 1 - _ clone [ exchange-unsafe ] keep
-    ] map ;
+    [ length [1..b) ] keep
+    '[ dup 1 - _ clone [ exchange-unsafe ] keep ] map ;
+
+: replace1 ( i word -- words )
+    [ ALPHABET ] 2dip bounds-check
+    '[ _ _ clone [ set-nth-unsafe ] keep ] { } map-as ;
 
 : replaces ( word -- edits )
-    [ length iota ] keep '[
-        ALPHABET [
-            swap _ clone [ set-nth-unsafe ] keep
-        ] with { } map-as
-    ] map concat ;
+    [ length <iota> ] keep '[ _ replace1 ] map concat ;
 
 : inserts ( word -- edits )
-    [ length [0,b] ] keep '[
-        CHAR: ? over _ insert-nth ALPHABET swap [
-            swapd clone [ set-nth-unsafe ] keep
-        ] curry with { } map-as
-    ] map concat ;
+    [ length [0..b] ] keep
+    '[ CHAR: ? over _ insert-nth replace1 ] map concat ;
 
 : edits1 ( word -- edits )
     [