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
Publicar un comentario