: at ( addr u -- addr ) cells + ;
: levenshtein_distance { s m t n }
n 1+ cells dup allocate throw dup { v0 } swap erase
n 1+ cells allocate throw { v1 }
m 0 ?do
i 1+ v1 0 at !
n 0 ?do
v1 i 1+ at
v0 i 1+ at @ 1+
v1 i at @ 1+
v0 i at @
s j + c@ t i + c@ <> if 1+ then
min min swap !
loop
v1 v0 n 1+ cells move
loop
s m type space t n type space
v0 n at @ . cr
;
s" kitten" s" sitting" levenshtein_distance \3
무슨 언어임?
포스