Scala Else返回功能
我正在学习
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的语义弄清楚’某事’是什么.我强烈建议您查看返回布尔值的其他函数,并询问它们如何应用于此处.具体来说,您正在寻找一个函数,对于任何提供的整数,如果该整数存在于原始集合中,它将为您提供转换. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |