def levenshtein(lst1,lst2,i,j):
if min(i,j) == 0:
return max(i,j)+1
return min(
levenshtein(lst1,lst2,i-1,j)+1,
levenshtein(lst1,lst2,i,j-1)+1,
levenshtein(lst1,lst2,i-1,j-1)+(1 if lst1[i] != lst2[j] else 0)
)
相应的lambda 版本:
Y = lambda f:(lambda g:f(lambda x:g(g)(x)))(lambda g:f(lambda x:g(g)(x)))
lev = lambda f:lambda lst1:lambda lst2:lambda i:lambda j:max(i,j)+1 if min(i,j)==0 else\
min(
f(lst1)(lst2)(i-1)(j)+1,
f(lst1)(lst2)(i)(j-1)+1,
f(lst1)(lst2)(i-1)(j-1)+(1 if lst1[i] != lst2[j] else 0)
)
levenshtein = Y(lev)