我正在使用Data.Vector,目前我需要计算向量的内容,以便用于计算加密哈希(Sha1)。我创建了以下代码。
dynamic :: a -> Int -> (Int -> Vector a -> a) -> Vector a
dynamic e n f =
let
start = Data.Vector.replicate n e
in step start 0
where
step vector i = if i==n then vector
else step (vector // [(i,f i vector)]) (i+1)
我创建了这个,以便填充向量的函数f可以访问partial 结果一路走来。当然这样的东西必须已经存在于Data.Vector中,不是吗?
问题陈述如下:您将解决动态编程问题,其中完成的结果是数组。你知道数组大小的大小,你有一个递归函数来填充它。
答案 0 :(得分:8)
您可能已经看到函数generate
,其大小为n
,函数f
的类型为Int -> a
,然后生成Vector a
大小n
。您可能不知道的是,在使用此功能时,您实际上可以访问部分结果。
我的意思是说,你传递给generate
的函数里面你可以引用你定义的向量,由于Haskell的懒惰它会正常工作(除非你做到这样以便不同的项目当然,矢量以循环的方式相互依赖。
示例:
import Data.Vector
tenFibs = generate 10 fib
where fib 0 = 0
fib 1 = 1
fib n = tenFibs ! (n-1) + tenFibs ! (n-2)
tenFibs
现在是一个包含前10个Fibonacci数的向量。
答案 1 :(得分:0)
也许您可以使用Data.Vector的扫描功能之一? http://hackage.haskell.org/packages/archive/vector/0.6.0.2/doc/html/Data-Vector.html#32