scala中的特别函数递归地连接两个列表:不使用“concat”
Posted
技术标签:
【中文标题】scala中的特别函数递归地连接两个列表:不使用“concat”【英文标题】:Ad hoc function in scala to concatenate two lists recursively: No use of "concat" 【发布时间】:2021-12-05 20:15:53 【问题描述】:我想在 Scala 中有一个函数,它可以连接两个列表,而不使用用于该目的的内置函数。它应该以函数递归的方式编写,但我不知道从哪里开始。
def concatList(lleft: List[String], lright: List[String]): List[String]
【问题讨论】:
从你的函数签名开始。 Discord 服务器是提出这个问题的更好地方。 @Usr654789 discord.gg/Eswfshby users.scala-lang.org/t/… @Usr654789 太好了,这听起来像是递归方法的好方法。只需用代码编写即可:) @Usr654789 docs.scala-lang.org/tour/pattern-matching.html 【参考方案1】:希望您现在解决了作业问题。对于将来遇到此问题的任何人,您可以像这样使用尾递归
def concatList(lleft: List[String], lright: List[String]): List[String] = lright match
case Nil => lleft // base condition
case head :: tail => // add first element to end of lleft and recurse
concatList(lleft :+ head, tail)
【讨论】:
为什么是第三种情况? @DmytroMitin 边缘情况,如果用户将null
传递给第二个参数。否则会产生讨厌的MatchError
。
如果你开始处理空值,当lleft
是null
和lright
是head :: tail
时会怎样? NPE 并不比 MatchError 好。我想如果空值是可能的,那么最好有Option[List[String]]
并用Option.apply(..)
处理这个问题。
我昨晚在一些 Discord 频道上这样做了,他们建议使用 ::: ,它仍然更快,但没有第三种情况
@DmytroMitin 我删除了它。以上是关于scala中的特别函数递归地连接两个列表:不使用“concat”的主要内容,如果未能解决你的问题,请参考以下文章