simple levenshtein added by C-Keen on Thu May 31 21:27:08 2012
;;;; levenshtein.scm - by Lorenzo Seidinari and Lars Rustemeier (module levenshtein (levenshtein-distance) (import chicken scheme foreign) (declare (foreign-declare #<<EOF #define min(a,b) ( ((a)<(b)) ? (a) : (b) ) #define min3(a,b,c) min(min((a),(b)),(c)) EOF )) ;; ****************************************** ;; * Implementation of Levenshtein distance * ;; ****************************************** ;; Compute levenshtein distance between s and t */ (define levenshtein-distance (foreign-lambda* int ((c-string s) (c-string t)) " //Step 1 int k,i,j,n,m,cost,*d,distance; n=strlen(s); m=strlen(t); if(n!=0&&m!=0) { d=(int*)malloc((sizeof(int))*(m+1)*(n+1)); m++; n++; //Step 2 for(k=0;k<n;k++) d[k]=k; for(k=0;k<m;k++) d[k*n]=k; //Step 3 and 4 for(i=1;i<n;i++) for(j=1;j<m;j++) { //Step 5 if(s[i-1]==t[j-1]) cost=0; else cost=1; //Step 6 d[j*n+i]=min3(d[(j-1)*n+i]+1,d[j*n+i-1]+1,d[(j-1)*n+i-1]+cost); } distance=d[n*m-1]; free(d); return(distance); } else return(-1); //a negative return value means that one or both strings are empty. "))