加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala Else返回功能

发布时间:2020-12-16 18:47:35 所属栏目:安全 来源:网络整理
导读:我正在学习 Scala课程中的Coursera FP原则,而我在第2周的任务中遇到了最后一个功能.我不想要答案,而是帮助理解Scala功能组合.我认为我对如何解决问题有正确的想法,我只是在特定于Scala的部分被绊倒了. 要点是:我们已经获得了一个类型别名,定义如下: type S
我正在学习 Scala课程中的Coursera FP原则,而我在第2周的任务中遇到了最后一个功能.我不想要答案,而是帮助理解Scala功能组合.我认为我对如何解决问题有正确的想法,我只是在特定于Scala的部分被绊倒了.

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

type Set = Int => Boolean

我将其解释为Set是一个函数,它接受一个I??nt并返回一个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:Map返回一个带有int的函数,如果该函数存在于Set中,则返回一个带有转换后的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

我没有意识到我的实施有什么问题.一位朋友在Haskell写了我的逻辑并发现它是成功的,所以我认为我的算法是正确的(虽然我可能是错的).我正在努力解决Scala实现细节问题.非常感谢任何建议或指导.

解决方法

请记住,您正在处理此处的Set,而Set被定义为将Int转换为布尔值的函数.因此,您的函数需要返回相同的东西:

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的语义弄清楚’某事’是什么.我强烈建议您查看返回布尔值的其他函数,并询问它们如何应用于此处.具体来说,您正在寻找一个函数,对于任何提供的整数,如果该整数存在于原始集合中,它将为您提供转换.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读