Haskell is the prototypical lazy evaluation language. One can compute a
Fibonacci sequence by the Haaskell equivalent of the following R code.
> fibs <- c(0, 1, rep(0, 8))
> fibs[3:10] <- fibs + fibs[-1]
This works as follows.
fibs = 0, 1, 0, 0, 0, 0, 0, 0, 0, 0
fibs = 0, 1, 0, 0, 0, 0, 0, 0, 0, 0
When one adds fibs to fibs[-1], one is effectively adding diagonally:
fibs[3] <- fibs[1] + fibs[2]
fibs[4] <- fibs[2] + fibs[3]
fibs[5] <- fibs[3] + fibs[4]
etc.
In Haskell, the value of fibs[3] used to compute fibs[4] is the value just
created by adding fibs[1] and fibs[2]. Similarly the value of fibs[4] used
to compute fibs[5] is the value that was just created in the previous
addition. In other words:
fibs[3] <- fibs[1] + fibs[2] # 0 + 1 = 1
fibs[4] <- fibs[2] + fibs[3] # 1 + 1 = 2
fibs[5] <- fibs[3] + fibs[4] # 1 + 2 = 3
fibs[6] <- fibs[4] + fibs[5] # 2 + 3 = 5
etc.
But if you actually carry out this calculation in R, this is you get.
>v <- c(0, 1, rep(0, 8))
>v
[1] 0 1 0 0 0 0 0 0 0 0
>v[3:10] <- v + v[-1]
Warning messages:
1: In v + v[-1] :
longer object length is not a multiple of shorter object length
2: In v[3:10] <- v + v[-1] :
number of items to replace is not a multiple of replacement length
>v
[1] 0 1 1 1 0 0 0 0 0 0
Is there any way to make this work?
*-- Russ *
[[alternative HTML version deleted]]