Что происходит при сортировке деревьев, так это применение вставки для каждого элемента в списке, создавая дерево и затем выравнивая его.
Точно верно.
[Где скрывается список?]
На функциональном языке вам не нужно указывать аргументы значения типа функции. Например, если я напишу
f = concat . map (map toUpper)
Я получаю функцию типа [[Char]] -> [Char]
. это
Функция ожидает аргумент, даже если в определяющем уравнении нет аргумента.
Это точно так же, как если бы я написал
f strings = (concat . map (map toUpper)) strings
Так как оператор точки является композицией функций, почему неправильно менять f . g
на f (g)
?
Они не имеют в виду одно и то же. Что происходит, когда каждый применяется к x
?
(f . g) x = f (g x)
(f (g)) x = (f g) x
Вы можете видеть, что приложения ассоциируются по-разному, и f. g
отличается от f g
.
Это ошибка типа, потому что foldr insert Leaf
- это функция от списков к деревьям, а flatten
предназначена для применения к одному дереву, а не к функции.