El problema de la edición de una cadena

 En el problema de la edición de una cadena se tienen dos cadenas y se quiere conocer que tan disímiles o tan parecidas son de acuerdo con alguna medida. En esta implementación tenemos una respuesta...


 
d ms "" = length ms
d "" ms = length ms
d (a:ms) (b:ns) | a==b = d ms ns
d (a:ms) (b:ns) | a/=b = 1+minimum [d ms (b:ns), d (a:ms) ns, d ms ns]

y éste algoritmo es ¡triplemente recursivo!

Para intentar ver sus llamadas, creamos un tipo de dato:

data T = H String | Tri T T T deriving Show

y aquí conformamos una construcción de las llamadas:


si [] ms = H ms
si ms [] = H ms
si (a:bs) (c:cs) = Tri (si bs (c:cs)) (si bs cs) (si (a:bs) cs)

En general, no es fácil ver árboles, pero lo siguiente puede ser pasado a

LaTeX para visualizar algunos resultados (primero se genera la cadena,

y se hace copy/paste a un archivo LaTeX; sería posible escribir el resultado

directamente a un archivo, pero queda como opcional, pues aún no hemos

visto cómo hacerlo).



showTC (H i) = "\\Tcircle{"++(show i)++"}"
showTC (Tri izq cen der) = "\\pstree{\\Tcircle{" ++ "Tri" ++"}}{"
        ++ showTC izq ++ showTC cen ++ showTC der ++"}"

Poner

putStrLn (showTC (si "mu" "hol"))

para obtener una salida que alimente al compilador de LaTeX.



Comentarios

Entradas populares de este blog

La entrada y salida en Haskell

OpenGL en Haskell (material opcional)

¡Pi en Haskell!