Guest User

Untitled

a guest
Nov 18th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.85 KB | None | 0 0
  1. val rubbishFn =new { type Pred = Int => Boolean; type MA[Pred] = List[Pred]; def test(colFn: MA[Pred])(implicit e: MA[Pred] <:< List[Pred]) = for(fn <- colFn) println(fn(1)) }
  2.  
  3. scala> def bind[A,B,C](a: A, p: A => B, f: (B, A) => C): C = f(p(a),a)
  4. bind: [A, B, C](a: A, p: A => B, f: (B, A) => C)C
  5.  
  6. scala> def applyIf[A](a: A, f: A=>A, p: A => Boolean) : A = { val res = p(a); bind(a, p, (res:Boolean,a:A) => res match { case true => f(a); case _ => a} )}
  7. applyIf: [A](a: A, f: A => A, p: A => Boolean)A
  8.  
  9. def sqrt(n : Double) : Double = {
  10. def f(x : Double) = (x * x ) - n
  11. iterateWhile(2.0)(x => x - f(x) / (2 * x), x => f(x).abs > 1e-14)
  12. }
  13. type Pred[A] = A => Boolean
  14. def iterateWhile[A](a: A )(f: A => A , p: Pred[A]) : A = {
  15. val r = Iterator.continually {
  16. if (p(a)) f(a) match { case e if e == a => e; case e1 => e1 } } takeWhile(_ != a); r.next.asInstanceOf[A] }
Add Comment
Please, Sign In to add comment