Вы, вероятно, уже видели функцию generate
, которая принимает размер n
и функцию f
типа Int -> a
, а затем создает Vector a
размера n
.Вероятно, вы не знали, что при использовании этой функции у вас действительно есть доступ к частичным результатам.
Я хочу сказать, что внутри функции, которую вы передаете generate
, вы можете обращаться квектор, который вы определяете, и из-за лени Хаскелла он будет работать нормально (если вы не сделаете так, чтобы разные элементы вектора зависели друг от друга по кругу, конечно).
Пример:
import Data.Vector
tenFibs = generate 10 fib
where fib 0 = 0
fib 1 = 1
fib n = tenFibs ! (n-1) + tenFibs ! (n-2)
tenFibs
теперь является вектором, содержащим первые 10 чисел Фибоначчи.