Союз рекурсивных множеств: как это работает на самом деле?

В настоящее время я беру курс Scala на Coursera в свободное от работы время, чтобы наконец попробовать функциональное программирование. В настоящее время я работаю над заданием, в котором мы должны «вычислить» объединение двух наборов, содержащих некоторый объект. Я намеренно опускаю детали, поскольку это не очень важно для того, что я пытаюсь спросить здесь. Однако важно, чтобы наборы определялись как двоичные деревья, где каждый узел содержит элемент и два поддерева.

Это так; примерunion в лекции заключается в следующем:

def union(other:BTSet) :BTSet = ((left union right) union other) incl element

Вопрос 1: Откровенно говоря, даже после прочтения соответствующих FAQ и других веток форума, я все еще не понимаю, как и почему эта функция работает. Здесь нет абсолютно никакого «действия», выполняемого в объединенной реализации, кроме добавленияincl call) элемент в главном узле, он просто вызывает себя снова и снова. Я был бы очень признателен за некоторые объяснения ...

Вопрос 2: На форуме курса много постов, в которых говорится, что это решение вообще неэффективно и недостаточно. Поскольку я не понимаю, как это работает с самого начала, я не понимаю, почему это недостаточно хорошо.

ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ, что я никоим образом не прошу спойлер для решения задачи. Я более чем готов «сделать работу для класса», но я просто не понимаю, что я должен делать здесь. Я не верю, что инструкции и указания, приведенные в курсе, достаточны для того, чтобы обдумать причину функционального программирования, поэтому я приветствую любые комментарии / ответы, которые касаютсякак правильно думать скорее, чемкак правильно кодировать.

Ответы на вопрос(6)

Ваш ответ на вопрос