繁体   English   中英

Scala 等价于 Haskell 的转置

[英]Scala equivalent to Haskell's transpose

如果将这种形式的 Haskell 转置函数精确地逐行转换为 Scala,它会是什么?

Haskell's transpose:
tr               :: [[a]] -> [[a]]
tr []             = []
tr ([]   : xss)   = tr xss
tr ((x:xs) : xss) = (x : map head xss) : tr (xs : map tail xss)

我对 Scala 的尝试不起作用:

def scalaTranspose(m: List[List[Int]]): List[List[Int]] = m match {
case Nil => Nil
case Nil::xss => scalaTranspose(xss)
case (x::xs)::xss => (x:: map head xss) :: scalaTranspose(xs :: map tail xss)
}

在努力翻译地图功能之后,这作为最后一行也不起作用:

case (x::xs)::xss => (x:: xss.map(head xss)) :: scalaTranspose(xs :: xss.map(tail xss))

Scala和haskell有点不一样,这里的模式匹配比起haskell也有点欠缺。 此外,由于 Scala 混合了面向对象的组件,因此headtail是定义在List objects上的methods ,而不是纯functions 您将不得不用 Scala 等效xss.map(_.head)替换map head xss

def scalaTranspose(m: List[List[Int]]): List[List[Int]] = m match {
  case Nil => Nil
  case Nil :: xss => scalaTranspose(xss)
  case (x :: xs) :: xss => (x :: xss.map(_.head)) :: scalaTranspose(xs :: xss.map(_.tail))
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM