0

在 Scala的以下练习中实现函数式编程的尝试如何?

// EXERCISE 5: Write a monoid instance for that String inserts spaces
// between words unless there already is one, and trims spaces off the ends of the
// result.
def trimMonoid = new Monoid[String] {
    def op(a1: String, a2: String) = a1.trim + " " + a2.trim
    val zero = ""
}

这是测试幺半群的正确方法吗?这是函数签名,但我不确定如何用我所拥有的实现:def trimMonoid(s: String): Monoid[String].

object MonoidTesting {
def main(args: Array[String]) = {

    val words = List("Hic", "Est", "Barbarus")

    val res = trimMonoid.op( ("Hic"), (trimMonoid.op("est ", "chorda ")) )
    println("res : " + res)
    assert(res == "Hic est chorda")

    println("success")
  }
}
4

2 回答 2

1

我不确定你trimMonoid是否正确地完成了练习的要求,但无论如何,如果它用于测试,那么你可以通过这种方式更好地测试它:

scala> val xs = List("hey","hi","hello")
xs: List[String] = List(hey, hi, hello)

scala> xs.foldLeft(trimMonoid.zero)((x,y)=> trimMonoid.op(x,y))
res2: String = hey hi hello
于 2013-10-22T05:23:09.377 回答
1

的用例之一Monoid是在fold. 我猜在 Scala 中你有 foldLeft 和 foldRight 可以用来在字符串列表中测试它

val res = words.foldLeft(trimMonoid.zero)(trimMonoid.op _)
于 2013-10-22T05:17:24.283 回答