gpt4 book ai didi

Scala Else 返回函数

转载 作者:行者123 更新时间:2023-12-04 15:54:29 24 4
gpt4 key购买 nike

我正在学习 Scala 类(class)中的 Coursera FP 原则,但我在第 2 周作业的最后一个功能上遇到了问题。我不想要答案,而是对理解 Scala 函数组合的一些帮助。我想我对如何解决这个问题有正确的想法,我只是被 Scala 特定的部分绊倒了。

要点是:我们得到了一个类型别名,定义如下:

type Set = Int => Boolean

我已经解释为 Set 是一个函数,它接受一个 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 转换它的元素,并返回一个新的集合。

伪代码:Map 返回一个接受 int 的函数,如果该 int 存在于 Set s 中,则返回一个带有转换后的 int X(或 p(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

我不是在想我的实现有什么问题。一个 friend 用 Haskell 写出我的逻辑并发现它是成功的,所以我认为我的算法是正确的(虽然我可能是错的)。我正在为 Scala 实现细节而苦苦挣扎。非常感谢任何建议或指导。

最佳答案

请记住,您正在处理 Set在这里,和 Set被定义为转换 Int 的函数到 Boolean .因此,您的函数需要返回相同的内容:

def map(s: Set, p: Int => Int): Set = { 
x =>
if (s(x)) singletonSet(p(x)) // Returns a Set
else p(x) => false // Returns a Boolean
}

我们可以看到,尽管有输入,但您有两种不同的输出情况,我们知道这肯定是错误的。现在,让我们还回想一下您还有其他功能,以及您对 set 和“expand”正在构建的内容的定义:
def map(s: Set, p: Int => Int): (Int) => (Boolean)  //Expand 'Set' to int->boolean
= (x: Int) => (Something that returns a boolean)

你的工作是根据 map 的语义找出那个“东西”是什么。 .我强烈建议查看其他返回 bool 值的函数,并询问它们如何在此处应用。具体来说,您正在寻找一个函数,对于提供的任何整数,如果该整数存在于原始集合中,则为您提供转换。

关于Scala Else 返回函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39153900/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com