Я прохожу курс функционального программирования Мартина Одерски в scala на Coursera.
Однако я не могу понять решения 2-го задания Funsets.scala.
type Set = Int => Boolean
/**
* Indicates whether a set contains a given element.
*/
def contains(s: Set, elem: Int): Boolean = s(elem)
/**
* Returns the union of the two given sets,
* the sets of all elements that are in either `s` or `t`.
*/
def union(s: Set, t: Set): Set = (e: Int) => s(e) || t(e)
Вопрос В приведенной выше функции что такое e? От куда это ? Я знаю, что функция объединения объединяет два набора, но из определения метода я понял, что она принимает 2 набора в качестве входных данных и возвращает результирующий набор объединения, так откуда берется e?
/**
* Returns the intersection of the two given sets,
* the set of all elements that are both in `s` or `t`.
*/
def intersect(s: Set, t: Set): Set = (e: Int) => s(e) && t(e)
Тот же вопрос применим к функции пересечения.
Пожалуйста, кто-нибудь может объяснить мне работу двух вышеуказанных функций, то есть этих двух операторов
(e: Int) => s(e) || t(e)
и (e: Int) => s(e) && t(e)
Set
является функцией! Итак, вintersect
вы возвращаете функцию. Это функция, которая возвращает функцию. Сначала может показаться страшным, но это очень мощно. Так же, как вы передаете обычный параметр, вы можете передать функцию (здесьSet
). Как вы говорите, если бы у меня был e типаInt
, тоintersect
вернулся бы... - person insan-e   schedule 22.12.2017