在haskell中,我们有语法糖'do'帮助表达monad运算.scala中我们也有相应语法糖'for'. for表达式会被scala compiler做一些变换,简单的例子如下: for { a <- foo b <- bar } yield (a + b) ===> foo.flatMap((a) => { bar.map((b) => { a + b }) }) 所以我们需要实现两个方法 flatMap和map. 还是用前面的state monad作为例子, 我们给类型
戳我去解题 Implement int sqrt(int x). Compute and return the square root of x. 1. 二分查找 2. 牛顿迭代法 不断用(x,f(x))的切线来逼近方程x^2-a=0的根.根号a实际上就是x^2-a=0的一个正实根,这个函数的导数是2x. 也就是说,函数上任一点(x,f(x))处的切线斜率是2x.那么,x-f(x)/(2x)就是一个比x更接近的近似值. 代入f(x)=x^2-a得到x-(x^2-a)/(2x),也就是(x+a/x