[英]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 混合了面向对象的组件,因此head
和tail
是定义在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.