Scala - 多个函数,返回多个函数

Posted

技术标签:

【中文标题】Scala - 多个函数,返回多个函数【英文标题】:Scala - multiple function, returns multiple function 【发布时间】:2021-12-21 14:15:00 【问题描述】:

我开始学习 scala 的基础知识,但我在理解简单函数方面遇到了问题。我有三个任务要做。首先对我来说很容易,我知道它是如何工作的。但是接下来的两个我不明白我必须写什么才能返回。

def compose[A,B,C](f: A => B)(g: B => C): A => C = 
            a: A => g(f(a))
        


def prod[A,B,C,D](f: A => C, g: B => D): (A, B) => (C, D) 
???????????



def lift[A,T](op: (T,T) => T)(f: A => T, g: A => T): A => T 
??????????

【问题讨论】:

因为最好的办法是帮助您找出解决方案,而不是仅仅提供代码,所以我邀请您到Scala Discord server,以便我们可以为您提供更多互动帮助:) 请编辑问题以将其限制为具有足够详细信息的特定问题,以确定适当的答案。 【参考方案1】:

让我们看一下类型,通过查看它们应该可以很容易地实现该方法。

prod开始,写输入参数和预期输出:

def prod[A,B,C,D](f: A => C, g: B => D): (A, B) => (C, D) = 
  (a: A, b: B) => 
    val c: C = ???
    val d: D = ???
    (c, d) 
  

那么,你如何构建cd 给定你所拥有的(即fg)?

我让你自己回答这个问题。


同样适用于lift

def lift[A,T](op: (T,T) => T)(f: A => T, g: A => T): A => T 
  (a: A) => 
    val t: T = ???
  

如果您不知道 lift 应该做什么,这可能会有点棘手。 提示:您可能必须使用fg,否则它们将不存在。那么从得到的值中,如何得到想要的输出类型呢?

【讨论】:

以上是关于Scala - 多个函数,返回多个函数的主要内容,如果未能解决你的问题,请参考以下文章

Scala中的柯里化

Scala 柯里化

Scala函数柯里化(Currying or Curry)

Scala函数柯里化(Currying)

Scala函数柯里化(Currying)

Scala函数柯里化(Currying)