Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Функция fib: (Int, Int => Boolean) => List[Int], порождающая
- последовательность чисел Фибоначчи, не превышающих заданного целого числа и
- удовлетворяющих некоторому предикату.
- //
- // original idea by Dasha.S
- //
- val fib_helper: (Int, Int => Boolean, Int, Int) => List[Int] = {
- case (n, p, p1, p2) if (n < p2) => List()
- case (n, p, p1, p2) if (p(p2)) => p2::fib_helper(n, p, p2, p1 + p2)
- case (n, p, p1, p2) => fib_helper(n, p, p2, p1 + p2)
- }
- val fib: (Int, Int => Boolean) => List[Int] = {
- (n, p) => fib_helper (n, p, 0, 1)
- }
- val fib: (Int) => List[Int] = {
- case (0) => List(1)
- case (1) => 1 :: fib(0)
- case (x) => (fib(x-1)(0) + fib(x-2)(0)) :: fib(x-1)
- }
- val sort_top: (List[Int], Int) => List[Int] = {
- case (Nil, a) => List()
- case (x :: xs, a) if (x < a) => x :: sort_top(xs, a)
- case (x :: xs, a) => sort_top(xs, a)
- }
- val sort_pred: (List[Int], Int => Boolean) => List[Int] = {
- case (Nil, a) => List()
- case (x :: xs, p) if (p(x)) => x :: sort_pred(xs, p)
- case (x :: xs, p) => sort_pred(xs, p)
- }
- val main: (Int, Int => Boolean) => List[Int] = {
- (n, p) => sort_pred(sort_top(fib(n), n), p)
- }
- //fib(10, _ > 3):
- //(8, 5)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement