Advertisement
Ladies_Man

#SCALA Lab1 COMPLETE

Mar 13th, 2016
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 1.30 KB | None | 0 0
  1. Функция fib: (Int, Int => Boolean) => List[Int], порождающая
  2. последовательность чисел Фибоначчи, не превышающих заданного целого числа и
  3. удовлетворяющих некоторому предикату.
  4.  
  5.  
  6.  
  7. //
  8. // original idea by Dasha.S
  9. //
  10.  
  11. val fib_helper: (Int, Int => Boolean, Int, Int) => List[Int] = {
  12. case (n, p, p1, p2) if (n < p2)     => List()
  13. case (n, p, p1, p2) if (p(p2))      => p2::fib_helper(n, p, p2, p1 + p2)
  14. case (n, p, p1, p2)                 => fib_helper(n, p, p2, p1 + p2)
  15. }
  16.  
  17. val fib: (Int, Int => Boolean) => List[Int] = {
  18. (n, p) => fib_helper (n, p, 0, 1)
  19. }
  20.  
  21.  
  22.  
  23.  
  24. val fib: (Int) => List[Int] = {
  25. case (0)        => List(1)
  26. case (1)        => 1 :: fib(0)
  27. case (x)        => (fib(x-1)(0) + fib(x-2)(0)) :: fib(x-1)
  28. }
  29.  
  30. val sort_top: (List[Int], Int) => List[Int] = {
  31. case (Nil, a)                   => List()
  32. case (x :: xs, a) if (x < a)    => x :: sort_top(xs, a)
  33. case (x :: xs, a)               => sort_top(xs, a)
  34. }
  35.  
  36. val sort_pred: (List[Int], Int => Boolean) => List[Int] = {
  37. case (Nil, a)                   => List()
  38. case (x :: xs, p) if (p(x))     => x :: sort_pred(xs, p)
  39. case (x :: xs, p)               => sort_pred(xs, p)
  40. }
  41.  
  42. val main: (Int, Int => Boolean) => List[Int] = {
  43. (n, p) => sort_pred(sort_top(fib(n), n), p)
  44. }
  45.  
  46.  
  47. //fib(10, _ > 3):
  48. //(8, 5)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement