gpt4 book ai didi

Haskell 的 groupBy 的 Scala 实现

转载 作者:行者123 更新时间:2023-12-04 15:14:51 25 4
gpt4 key购买 nike

我正在寻找 Haskell 的 groupBy 的 Scala 实现。

行为应该是这样的:

isD :: Char -> Bool
isD c = elem c "123456789-_ "

groupBy (\a b -> isD a == isD b) "this is a line with 0123344334343434343434-343 3345"
["this"," ","is"," ","a"," ","line"," ","with"," 0123344334343434343434-343 3345"]

我尝试了 Scala groupBy 函数,但是它只需要一个参数的函数,而不是 Haskell 的 2。我还查看了分区,但是它只返回一个元组。

我正在寻找的函数应该对与谓词匹配的每个连续元素进行分组。

最佳答案

这样的问题似乎经常出现,这很好地表明 IMO 应该将 Rex Kerr 的 groupedWhile 方法包含在标准集合库中。但是,如果您不想将其复制/粘贴到您的项目中......

我喜欢你的递归解决方案,但它实际上并没有输出正确的东西(即字符串),所以我将如何更改它:

def groupBy(s: String)(f: (Char, Char) => Boolean): List[String] = s match {
case "" => Nil
case x =>
val (same, rest) = x span (i => f(x.head, i))
same :: groupBy(rest)(f)
}

然后,使用你的函数并在 REPL 中尝试:
val isD = (x: Char) => "123456789-_ " contains x
groupBy("this is a line with 0123344334343434343434-343 3345")(isD(_) == isD(_))

结果是 List[String] ,这大概是您真正想要的。

关于Haskell 的 groupBy 的 Scala 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8261604/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com