У меня есть следующая реализация ADT в Scala.Максимальный элемент в дереве
Как найти максимальный элемент в дереве? Могу ли я ввести некоторую вспомогательную функцию, и если да, то как?
abstract class MySet {
def max: Int
def contains(tweet: Tweet): Boolean = false
}
class Empty extends MySet {
def max: throw new NoSuchElementExeption("max called on empty tree")
def contains(x: Int): Boolean =
if (x < elem) left.contains(x)
else if (elem < x) right.contains(x)
else true
}
class Node(elem: Int, left: MySet, right: MySet) extends Set {
def max: { ... }
def contains(x: Int): Boolean =
if (x < elem) left.contains(x)
else if (elem < x) right.contains(x)
else true
}
Я нашел решение в Haskell, которое чувствует себя достаточно интуитивно, я могу каким-то образом преобразовать его в Scala?
data Tree a = Nil | Node a (Tree a) (Tree a)
maxElement Nil = error "maxElement called on empty tree"
maxElement (Node x Nil Nil) = x
maxElement (Node x Nil r) = max x (maxElement r)
maxElement (Node x l Nil) = max x (maxElement l)
maxElement (Node x l r) = maximum [x, maxElement l, maxElement r]
Update
Я не заинтересован в копировании кода Haskell в Scala вместо этого я думаю, что Haskell версия является более интуитивным, но из-за this
ключевых слов и другие вещи на объектно-ориентированном языке. Как я могу написать эквивалентный код в объектно-ориентированном стиле без соответствия шаблону?
Вы затеняете класс 'scala.collection.Set'? Второй вопрос: что такое «дерево»? У вас есть только один метод, который возвращает целое число. –
Максимальный элемент в дереве чего? –
Так где же diffuculty? –