diff --git a/extra/spelling/spelling.factor b/extra/spelling/spelling.factor index 78e5b20a31..2ade0d1bbe 100644 --- a/extra/spelling/spelling.factor +++ b/extra/spelling/spelling.factor @@ -1,7 +1,9 @@ +! Copyright (C) 2010 John Benediktsson +! See http://factorcode.org/license.txt for BSD license USING: arrays ascii assocs combinators combinators.smart fry 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 ; +locals math math.ranges math.statistics memoize sequences +sequences.private sorting splitting urls ; IN: spelling ! http://norvig.com/spell-correct.html @@ -12,23 +14,19 @@ CONSTANT: ALPHABET "abcdefghijklmnopqrstuvwxyz" [ length ] 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 ] keep '[ - ALPHABET [ - swap _ clone [ set-nth-unsafe ] keep - ] with { } map-as - ] map concat ; + [ length ] 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 ) [