2014-02-05 1 views
0

Позволяет сказать, что я сделать мое дерево, как этотHaskell Binary Tree с только обугливается

data Tree a = EmptyTree | Node a (Tree a) (Tree a) deriving (Show, Read, Eq)

Но я хочу, чтобы сделать дерево, которое использует только символы не нужно быть шаблона. Я знаю, что мое дерево будет использовать только символы, если я сделаю это как выше, я не могу сделать if dataOfNode == ')' в функции, потому что он говорит, что это тип [char] и он ожидает тип [a].

Как создать дерево, которое будет использовать только символы или есть способ сделать этот тип проверки dataOfNode == ')' с этим типом дерева, которое я дал. Можете ли вы дать мне короткий пример функции, которая, скажем, проверит, являются ли данные в этом узле знаком «)»?

Edit:
По просьбе я отправляю функцию, которую я хотел бы сделать `

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 

Логически она не закончена, но я не могу использовать его, потому что он принимает строку, которую я divade char by char. Вот почему я уверен, что хочу сделать свое дерево только из символов, поэтому я могу заменить type a на type char в начале функции. У него есть и другие ошибки, но я думаю, что основная идея понятна.

+0

Включите код, который вы пробовали, что не работает. –

+0

Хорошо, я отредактирую его за 2 минуты. – user3129475

+0

Тег 'templates' вместе с' haskell' может привести к недоразумениям. Заменяя его на 'type-variables' – Odomontois

ответ

2

Вы легко могли бы заменить определение типа с

data Tree = EmptyTree | Node Char Tree Tree deriving (Show, Read, Eq) 

или специализироваться только вашу функцию, определяющую его как

buildTreeHelper :: String -> Char -> Int -> String -> Tree Char -> Tree Char 
+0

Спасибо вам большое! – user3129475