2.15. Generowanie sekwencji liczb

Problem

Zdefiniowana jest pewna sekwencja liczb (być może nieskończona), po której należy zorganizować iterację w taki sam sposób, jak iteruje się tablice lub zakresy.

Rozwiązanie

Tworzymy funkcję-generator, która za pomocą metody yield udostępnia kolejne elementy generowanej sekwencji, na przykład tak:

def fibonacci(limit = nil)
  seed1 = 0
  seed2 = 1
  while not limit or seed2 <= limit
    yield seed2
    seed1, seed2 = seed2, seed1 + seed2
 end
end


fibonacci(3) { |x| puts x }
# 1
# 1
# 2
# 3

fibonacci(1) { |x| puts x }
# 1
# 1

fibonacci { |x| break if x > 20; puts x }
# 1
# 1
# 2
# 3
# 5
# 8
# 13

Dyskusja

Generator sekwencji liczb funkcjonuje podobnie do iteratora tablicy lub innej struktury danych. W przeciwieństwie ...

Get Ruby. Receptury now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.