He estado trabajando en la pregunta 67A of 99 Haskell Questions. La cuestión es la construcción de un árbol de una cadena dada: "x(y,a(,b))" => Branch 'x' (Branch 'y' Empty Empty) (Branch 'a' Empty (Branch 'b' Empty Empty))
Una solución utilizando Parsec
es la siguiente:no se pueden encontrar módulos de Parsec en GHCi
import Text.Parsec.String
import Text.Parsec hiding (Empty)
pTree :: Parser (Tree Char)
pTree = do
pBranch <|> pEmpty
pBranch = do
a <- letter
char '('
t0 <- pTree
char ','
t1 <- pTree
char ')'
return $ Branch a t0 t1
pEmpty =
return Empty
stringToTree str =
case parse pTree "" str of
Right t -> t
Left e -> error (show e)
Sin embargo, mi GHCi podía ni encontrar ni Text.Parsec.String
Text.Parsec
. ¿Están esos módulos obsoletos? Mi versión es GHCi 6.12.3
thx, está compilado bien después de instalar parsec-3. Sin embargo, hay una excepción "inesperada", "esperando" ("' cuando se ejecuta ahora. – manuzhang
La entrada "x (y, a (, b))" no puede ser analizada por el analizador dado, que exige el formato rígido " x (y (,), a (, b (,))) para ese árbol –
thx de nuevo y publico tu solución en 99 preguntas de Haskell. ¿De acuerdo? Si no, lo eliminaré inmediatamente – manuzhang