Árbol binario de Haskell con solo caracteres
Frecuentes
Visto 593 equipos
0
Digamos que hago mi árbol así
data Tree a = EmptyTree | Node a (Tree a) (Tree a) deriving (Show, Read, Eq)
Pero quiero hacer un árbol que use solo caracteres. No necesito que sea una plantilla. Sé que mi árbol solo usará caracteres si lo hago como el de arriba que no puedo hacer if dataOfNode == ')'
en una función porque dice que es un tipo [char] y espera un tipo [a].
Cómo hacer un árbol que usaría solo caracteres o hay alguna manera de hacer este tipo de verificación dataOfNode == ')'
con este tipo de árbol que le di. ¿Me puede dar un breve ejemplo de una función que, digamos, verifique si los datos en este nodo son el signo ')'?
Edit:
Según lo solicitado, estoy publicando la función que me gustaría hacer `
buildTreeHelper :: (Ord a) => String -> a -> Int -> String -> Tree a -> Tree a
buildTreeHelper str blank turn path t
| str == [] = t
| front == '(' = buildTreeHelper (tail str) blank 1 ('L':path) (expandTree (reverse path) blank t)
| front == ')' = buildTreeHelper (tail str) blank 2 (tail path) t
| turn == 1 = buildTreeHelper (tail str) blank 2 (tail path) (expandTree (reverse path) front t)
| turn == 2 = buildTreeHelper (tail str) blank 3 ('R':path) (expandTree (reverse path) front t)
| turn == 3 = buildTreeHelper (tail str) blank 2 (tail path) (expandTree (reverse path) front t)
where
front = head str
Lógicamente no está terminado pero tampoco lo puedo usar porque lleva un string el cual voy desviando char por char. Es por eso que estoy seguro de que quiero hacer mi árbol solo a partir de caracteres para poder reemplazar type a
type char
al comienzo de la función. También tiene otros errores, pero creo que la idea principal está clara.
1 Respuestas
2
Fácilmente podría reemplazar su definición de tipo con
data Tree = EmptyTree | Node Char Tree Tree deriving (Show, Read, Eq)
o especializarte solo en tu función definiéndola como
buildTreeHelper :: String -> Char -> Int -> String -> Tree Char -> Tree Char
Respondido 05 Feb 14, 17:02
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas haskell tree char binary-tree type-variables or haz tu propia pregunta.
Incluya el código que probó que no funcionó. - Daniel Wagner
Ok, lo editaré en 2 minutos. - user3129475
templates
etiqueta junto conhaskell
podría dar lugar a malentendidos. reemplazándolo contype-variables
- OdomontoisNo incluyes la definición de
expandTree
, por lo que no es posible estar seguro, pero noto que a veces llamasexpandTree
con un argumento deblank
(que es un tipo especificado por la persona que llama) y, a veces, lo llaman con un argumento defront
(el cual es unChar
). Estos no son obviamente del mismo tipo, y es probablemente la fuente de la queja de GHC. - Daniel WagnerSí, tiene usted razón. Lo hice así porque quería tener más claro dónde está el problema. Blank también es un carácter constante y no puede ser otra cosa, así que lo cambié también al tipo 'char' y funciona bien. - user3129475