Подтвердить что ты не робот

Справка по присваиванию: соединение между наборами

Я использую функциональное программирование Coursera в классе Scala. Это вторая неделя, и я ударил стену. В задании мы работаем с Sets, но не с тем набором, который мы все встречаем в Java, например. Это Set, который возвращает true, если значение там, и false в противном случае. Они говорят, что это не контейнер, это просто функция.

Чтобы понять это, мне нужна ваша помощь. Я не хочу, чтобы вы решали мое задание, это просто пример того, что я хочу получить представление о том, что я должен делать.

/**
   * We represent a set by its characteristic function, i.e.
   * its `contains` predicate.
   */
  type Set = Int => Boolean

 /**
   * Indicates whether a set contains a given element.
   */
  def contains(s: Set, elem: Int): Boolean = s(elem)

 /**
   * Returns the set of the one given element.
   */
  def singletonSet(elem: Int): Set = Set(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 = ???  

Это код. В singletonSet я предполагаю, что способ решить это - вернуть Set(elem), правильно?

Если это хорошо, как я должен сделать союз между ними? Я не новичок в программировании, но я не вижу никакого способа сделать это. Так как я не должен возвращать "набор" чисел.

Вот что сказал мне еще один студент: "Но все" Set "- это функция, которая принимает Int и возвращает логическое значение (Int = > Boolean). Любая функция, которая принимает Int и возвращает логические подстановки тип" Установить".

То, что я пробовал в функции union, должно иметь что-то вроде:

def union(s: Set, t: Set): Set = (s | t) //value | not a member of Int => Boolean  

Любая помощь будет оценена:)

4b9b3361

Ответ 1

Кажется, стена, которую вы нажимаете, - это то, что вы не знакомы с определением функций в Scala. В этом конкретном случае вам нужно определить функции типа Int => Boolean, они берут Int и возвращают a Boolean.

Вот несколько примеров функциональных литералов типа Int => Boolean. Попробуйте их в консоли Scala или в таблице Scala IDE:

(x: Int) => true
(x: Int) => false
(x: Int) => x == 2
(x: Int) => x == 10
(x: Int) => x == 2 || x == 10
(x: Int) => x % 2 == 0

Затем все, что вам нужно сделать для назначения, - использовать тот же синтаксис, начиная с (x: Int) =>, а затем перевести значение union, intersect,... в правую часть выражения.

Часть обучения дает ему настоящие усилия. Я считаю, что вы можете повторно отправить решение несколько раз, поэтому не стесняйтесь отправлять и повторять, если вы не получите 10/10 с первой попытки. Все, что вам нужно, это компиляция кода. Удачи!

Ответ 2

Возможный намек - посмотреть на типы. Посмотрите на тип Set. На самом деле это псевдоним типа с функцией Int на Boolean.

Таким образом, если у вас есть два набора, у вас есть две функции. Как вы можете использовать их для предоставления функции, представляющей объединение этих Set? Это должна быть ваша отправная точка.