Помощь в объявлении переменного количества аргументов

Высокие парни,

Я должен определить полиморфный тип данных для дерева, которое может иметь несколько узлов. Каждый узел может иметь любое количество дочерних элементов и 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)

или такой

Другие вопросы по тегам