insert
имеет тип t
, он принимает два аргумента: один из Bool
и один из кортежа из двух списков типа t
и возвращает кортеж из двух списков типа t
.
Нет .Прежде всего важно отметить, что в Haskell каждая функция принимает ровно один параметр.Действительно,
insert :: t -> Bool -> ([t],[t]) -> ([t],[t])
- это короткая и компактная форма:
insert :: t -> (Bool -> (([t],[t]) -> ([t],[t])))
на самом деле вышеприведенное все еще не очень многословно, каноническая форма будет:
insert :: ((->) t) (((->) Bool) (((->) ((,) ([] t)) ([] t)) ((,) ([] t)) ([] t)))
, но вышесказанное, конечно, не очень читабельно, поэтому давайте придерживаться второй формы.
Каждая функция в Haskell принимает ровно один параметр.Здесь происходит то, что результат применения параметра к определенной функции генерирует новую функцию.
Так что, если бы мы сгенерировали выражение insert x
, мы построили функциютип Bool -> (([t], [t]) -> ([t], [t]))
.
Неформально , иногда действительно говорят, что " функция принимает n параметров ".Но важно помнить об этом.
Во-вторых, вы забыли о t
.Неформально можно сказать, что insert
принимает три параметра, значение типа t
, логическое значение (тип Bool
) и 2-кортеж с двумя списками t
с.Он вернет 2 кортежа из двух списков t
с.В зависимости от того, Bool
равен True
или False
, он добавляет к одному из двух списков заданное значение.
Например:
Prelude> insert 5 False ([], [])
([],[5])
Prelude> insert 5 False ([1,4], [2,5])
([1,4],[5,2,5])
Prelude> insert 5 True ([1,4], [2,5])
([5,1,4],[2,5])
Prelude> insert 3 True ([1,4], [2,5])
([3,1,4],[2,5])
Prelude> insert 3 False ([1,4], [2,5])
([1,4],[3,2,5])
partition
- это кортеж типа t
, который возвращает bool
, и он принимает список типа t
в качестве аргумента и возвращает кортеж из двух списков типа t
.
Нет, здесь параметр имеет тип (t -> Bool)
, то есть функция .Действительно, в Haskell вы можете передавать функции в качестве параметров.
Неформально мы можем сказать, что partition
принимает " предикат " (функция, которая отображает значения в Bool
s) и списокt
с, и он возвращает 2-кортеж с двумя списками t
с.В зависимости от того, верен ли предикат для значений в списке, они сортируются в первом или втором списке в кортеже 2.
Например:
Prelude> partition (>3) [1,4,2,5]
([4,5],[1,2])
Prelude> partition (>3) [1,3,0,2]
([],[1,3,0,2])
Prelude> partition (>3) [1,7,8,0]
([7,8],[1,0])
Prelude> partition (>3) [1,7,8,9]
([7,8,9],[1])