Помощь в объявлении переменного количества аргументов
Высокие парни,
Я должен определить полиморфный тип данных для дерева, которое может иметь несколько узлов. Каждый узел может иметь любое количество дочерних элементов и vlaue. Этот тип всегда будет иметь хотя бы один узел. Я новичок в Haskell, поэтому я спрашиваю, как я могу объявить узел с переменным числом аргументов.
Это то, что у меня есть сейчас. Это дерево, которое может иметь узел или узел со значением (а) и двумя дочерними элементами дерева. Вместо двух детей дерева я хочу, чтобы они были любым числом детей дерева. (Analoog как java-переменная с числом аргументов "arg...")
data Tree a = Node a | Node a (Tree a) (Tree a) deriving (Show)
Спасибо за вашу помощь
РЕДАКТИРОВАТЬ
Небольшой вопрос::: Как я могу объявить этот узел с переменными аргументами в параметре функции (заголовок / подпись). Я должен реализовать функцию под названием
"содержит", который будет проверять, содержит ли узел определенный элемент.
contains :: Tree a -> b -> Bool
contains (Node val [(tree)]) = ......
Правильна ли вторая строка?
1 ответ
Это было бы:
data Tree a = Node a | Node a [(Tree a)] deriving (Show)
но кроме того есть еще одна проблема, что это должно быть
data Tree a = Leaf a | Branch a [(Tree a)] deriving (Show)
или например, части объединения должны иметь разные имена, иначе вы не сможете использовать сопоставление с образцом
Leaf
а также Branch
являются конструкторами данных так:
Branch 1 [Leaf 3, Branch 6 [Leaf 5]]
это пример Tree
contains :: Tree a -> a -> Boolean
contains (Leaf a) b = a == b
contains (Branch a c) b = a == b || any (map (\t -> contains t b) c)
или такой