fork(1) download
  1. : last ( addr u -- c ) 1- chars + c@ ;
  2.  
  3. : levenshtein ( addr1 u1 addr2 u2 -- uedits )
  4. dup 0= if 2drop nip exit then 2>r \ if either string is empty, difference
  5. dup 0= if 2drop 2r> nip exit then \ is inserting all chars from the other.
  6. 2dup last 2r@ last = \ last chars equal? then ignore and recur,
  7. if 1- 2r> 1- recurse exit then \ else 1 edit plus least distance after:
  8. 2dup 1- 2r@ recurse -rot \ an insertion,
  9. 2dup 2r@ 1- recurse -rot \ a deletion,
  10. 1- 2r> 1- recurse min min 1+ ; \ or a substitution.
  11.  
  12. s" kitten" s" sitting" levenshtein . cr
  13. s" rosettacode" s" raisethysword" levenshtein . cr
  14.  
Success #stdin #stdout #stderr 1.82s 5320KB
stdin
Standard input is empty
stdout
3 
8 
stderr
redefined Last with last