Задание звучит как:
Give an implementation of the Set abstract data type (ADT) using search trees.
Для примера, автор в книге, в качестве хранилища для Set использует обычные списки. Читателя просит не меняя экспортированного интерфейса для Set, заменить незаметно для пользователя реализацию, используя деревья.
Search trees - это тоже ADT. Как реализованы деревья нас не волнует. Мы только знаем о деревьях что слева от узла, расположены узлы с меньшим значением, а справа от узла - узлы с большим значением.
Запинка была только при реализации функций diff, union, inter(section). Довольно интересно находить пересечение, объединение и одностороннюю разницу для деревьев.
Решение задачки:
http://pastebin.com/f1958340dГде использовался ADT деревьев из главы выше:
http://pastebin.com/f661dae06
*Ex16d39> showSet show $ diff (makeSet [1,2,3,4,5,100,111]) (makeSet [5,4,3,2,1,10,11])
"100 111 "
*Ex16d39> showSet show $ union (makeSet [1,2,3,4,5,100,111]) (makeSet [5,4,3,2,1,10,11])
"1 2 3 4 5 10 11 100 111 "
*Ex16d39> showSet show $ inter (makeSet [1,2,3,4,5,100,111]) (makeSet [5,4,3,2,1,10,11])
"1 2 3 4 5 "