В настоящее время я беру курс Scala на Coursera в свободное от работы время, пытаясь наконец попробовать функциональное программирование. В настоящее время я работаю над заданием, где мы должны "рассчитать" объединение двух наборов, содержащих некоторый объект. Я намеренно упускаю детали, поскольку это не очень важно для того, что я пытаюсь задать здесь. Однако имеет значение то, что множества определяются как двоичные деревья, причем каждый node содержит элемент и два поддеревья.
Это так; пример union
в лекции выглядит следующим образом:
def union(other:BTSet) :BTSet = ((left union right) union other) incl element
Question1: Совершенно откровенно, даже прочитав соответствующие FAQ и другие темы форума, я до сих пор не понимаю, как и почему эта функция работает. В реализации объединения абсолютно нет "действия", кроме добавления (вызов incl
) элемента в голове node, он просто называет себя снова и снова. Я был бы очень признателен за некоторые объяснения...
Question2: В форуме курса есть много сообщений, в которых говорится, что это решение неэффективно и что оно недостаточно. Видя, как я не понимаю, как это работает, я не совсем понимаю, почему это недостаточно.
ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ, что я никоим образом не требую спойлера для решения задания. Я более чем готов "выполнять работу за класс", но я просто не понимаю, что я должен здесь делать. Я не верю, что инструкции и рекомендации, приведенные в курсе, достаточны для того, чтобы обернуться вокруг причуд функционального программирования, поэтому я приветствую любые комментарии/ответы, которые касаются того, как правильно думать, а не как правильно кодировать.