如果要准确地逐行将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))
答案 0 :(得分:1)
Scala与haskell有点不同,与haskell相比,这里的模式匹配也有些不足。另外,由于Scala混合了面向对象的组件,因此from django.conf import settings
from django.core.mail import send_mail
send_mail('This is the title of the email',
'This is the message you want to send',
settings.DEFAULT_FROM_EMAIL,
[
settings.EMAIL_HOST_USER, # add more emails to this list of you want to
]
)
和head
是在tail
methods
上定义的List
而非纯objects
上。您将必须用等同于scala的functions
替换map head xss
。
xss.map(_.head)