]> gitweb.factorcode.org Git - factor.git/blobdiff - extra/spelling/spelling.factor
factor: trim using lists
[factor.git] / extra / spelling / spelling.factor
index 0bf702da5aa798397e27a2e0a315fa5b7459b864..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 )
     [
@@ -59,9 +57,8 @@ CONSTANT: ALPHABET "abcdefghijklmnopqrstuvwxyz"
     ascii file-contents words histogram ;
 
 MEMO: default-dictionary ( -- counts )
-    "big.txt" temp-file dup exists?
-    [ URL" http://norvig.com/big.txt" over download-to ] unless
-    load-dictionary ;
+    URL" http://norvig.com/big.txt" "big.txt" temp-file
+    [ ?download-to ] [ load-dictionary ] bi ;
 
 : (correct) ( word dictionary -- word/f )
     corrections ?first ;