Thanks.

> Fusing the ws is trickier. Directly appealing to the fibonacci-number
> example is not recommended because this would mean to keep the last 16
> ws in memory and shifting them right to left by hand. But as the

Are you saying this because we don't want a 16-tuple?

> "Alternate method of computation" on the website suggests, you can
> delegate the shifting to an index that shifts around mod 16. Having a
> mutable array is helpful, then.

Are you saying that because haskell doesn't really have mutable arrays, this 
is ruled out?

> Of course, you can also fill a large static (boxed!) array of 80 Word8s via
>
>   ws :: Data.Array.IArray.Array Int Word8
>   ws = accumArray 0 (0,80) (curry snd) $
>        zip [0..15] xs ++ [(i, xxor i) | i<-[16..80]]
>       where
>       xxor i = ws ! (i-16) `xor`
>            ws ! (i-3) `xor` ws ! (i-8) `xor` ws ! (i-14)
>
> or something like that (I didn't care about correct indices and bounds).
> GHC can fuse such array accumulations.

Why is an array better than a list? Is it because (!) is O(1) and (!!) is 
O(n)?

>
> In general, keeping stuff in lists is not wrong, but ByteStrings are
> more adapted to current CPU and RAM architecture.

I'm not clear how ByteStrings help here. We need to put bits into 32 words and 
operate on these.

Dominic.


_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to