Rekurencyjne zestawienie związków: jak to naprawdę działa?

Obecnie uczestniczę w kursie Scala na Courserze w wolnym czasie po pracy, próbując w końcu spróbować funkcjonalnego programowania. Obecnie pracuję nad zadaniem, w którym mamy „obliczyć” unię dwóch zestawów zawierających jakiś obiekt. Celowo pomijam szczegóły, ponieważ nie jest to tak ważne dla tego, o co tu pytam. Istotne jest jednak to, że zbiory są zdefiniowane jako drzewa binarne, przy czym każdy węzeł zawiera element i dwa poddrzewa.

W takim przypadku; przykładunion w wykładzie:

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

Pytanie 1: Szczerze mówiąc, nawet po przeczytaniu odpowiednich FAQ i innych wątków forum nadal nie rozumiem, jak i dlaczego ta funkcja działa. Absolutnie nie ma tu żadnych działań w implementacji unii poza dodaniem (incl wywołaj) element w węźle głowy, po prostu wywołuje się w kółko. Byłbym bardzo wdzięczny za pewne wyjaśnienia ...

Pytanie 2: Forum kursu zawiera wiele postów stwierdzających, że to rozwiązanie w ogóle nie jest skuteczne i że nie jest wystarczająco dobre. Widząc, że nie rozumiem, jak to działa, nie rozumiem, dlaczego nie jest wystarczająco dobry.

PROSZĘ ZWRÓCIĆ UWAGĘ, że w żaden sposób nie proszę o spoiler dla rozwiązania przydziału. Jestem więcej niż chętny do „wykonywania pracy na ocenę”, ale po prostu nie rozumiem, co mam tutaj robić. Nie wierzę, że instrukcje i wskazówki zawarte w kursie są wystarczające, aby objąć głowę dziwactwami programowania funkcjonalnego, dlatego cieszę się z wszelkich komentarzy / odpowiedzi na ten adresjak dobrze myśleć zamiastjak poprawnie kodować.

questionAnswers(6)

yourAnswerToTheQuestion