-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
[ 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 )
[