Я принимаю Принципы Курса FP в курсе Scala, и у меня возникают проблемы с последней функцией в назначении недели 2. Мне не нужен ответ, а скорее какая-то помощь в понимании функциональности Scala. Я думаю, что у меня есть правильная идея о том, как решить проблему, я просто споткнулся о конкретной части Scala.Scala Else return function
Суть такова: мы уже дали псевдоним типа, определяемый как например:
type Set = Int => Boolean
Что я истолковал означает набор функция, которая принимает Int и возвращает Bool.
Нам также поручено завершить функцию singletonSet, которая принимает int и возвращает Set. Я написал его в качестве такого
def singletonSet(x: Int): Set = Set(x)
val three = singletonSet(3)
three(3) //True
three(5) //False
Функция У меня возникли проблемы с функция Map, которая имеет эту подпись:
def map(s: Set, p: Int => Int): Set
Что я истолковал означает функцию, которая принимает набор, преобразует его элементы с функцией P и возвращает новый набор.
pesudocode: Карта возвращает функцию, которая принимает Int, и если что ИНТ существует в Set s, возвращает новый набор с преобразованной Int X (или р (х)
Фактический код, который вырывается:
def map(s: Set, p: Int => Int): Set = {
x =>
if (s(x)) singletonSet(p(x))
else p(x) => false
}
The error that I'm getting with this format is:
error: not a legal formal parameter.
Note: Tuples cannot be directly destructured in method or function parameters.
Either create a single parameter accepting the Tuple1,
or consider a pattern matching anonymous function: `{ case (param1, param1) => ... }
else p(x) => false
Я не grokking, что случилось с моей реализацией. друг написал свою логику в Haskell и нашел его, чтобы быть успешным, так что я думаю, что мой алгоритм правильно (хотя я могу ошибаться). Я m борются с деталями реализации Scala. Любые советы или рекомендации очень ценятся.
У вас уже есть 'x => ...' в начале, поэтому вам нужно только тело новой функции, которая должна быть логическим выражением, но после ключевого слова 'else' у вас есть' p (x) = > false', что не имеет смысла, и это определенно * не * булево выражение –
Написание этого в Haskell вызывает ошибки типа, поэтому, возможно, ваш друг исправил его во время перевода и мог рассказать вам, что они сделали? – molbdnilo