2013-10-22 96 views
0

我如何尝试执行Functional Programming in 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 = "" 
} 

这是测试monoid的正确方法吗?这是函数签名,但我不确定如何使用我的实现: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") 
    } 
} 
+0

万一你错过了,笔者有一个[GitHub的仓库(https://github.com/pchiusano/fpinscala)与所有的练习提示与解决方法。 –

回答

1

之一的Monoid用例是在fold。我在斯卡拉猜你有foldLeft和foldRight,你可以用它来测试它串名单上

val res = words.foldLeft(trimMonoid.zero)(trimMonoid.op _) 
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 
相关问题