Я хотел бы сгенерировать unboxed вектор рекурсивно. В качестве простого примера:Возможны ли рекурсивные определения с незанятыми векторами?
import qualified Data.Vector as V
fib :: V.Vector Int
fib = V.generate 10 f
where
f 0 = 0
f 1 = 1
f x = (fib V.! (x - 1)) + (fib V.! (x - 2))
Функция правильно генерирует последовательность фибоначчи. Однако, если вместо этого я использую Data.Vector.Unboxed
, код будет висеть. Я понимаю причину, почему это так, но я все же хотел бы иметь возможность сделать рекурсивное определение и получить скорость распакованного вектора. Существуют ли какие-либо возможности для этого?
Спасибо. К сожалению, я на самом деле реализую алгоритм динамического программирования, так что, когда я завершаю вычисление вектора, я также получаю свой ответ и делаю с ним. Поэтому в моем фактическом случае это будет не очень полезно. Но в целом я бы сказал, что это хороший подход. – rityzmon
@ritzymon В этом случае, вы уверены, что хотите распаковать вектор? Стандартные методы динамического программирования с использованием списков часто довольно эффективны - в частности, они вообще не будут хранить весь список в памяти в любой точке. –