From: peter dalgaard <pdalgd_at_gmail.com>

Date: Fri, 08 Apr 2011 09:51:51 +0200

*>
*

> 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.
*

*>
*

*>
*

*>
*

> [1] 0 1 0 0 0 0 0 0 0 0

*>
*

*>
*

> 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
*

*>
*

*>
*

> [1] 0 1 1 1 0 0 0 0 0 0

*>
*

*>
*

*> Is there any way to make this work?
*

*>
*

Date: Fri, 08 Apr 2011 09:51:51 +0200

On Apr 8, 2011, at 06:08 , Russ Abbott wrote:

> 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.

>> 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:

>> v

> [1] 0 1 1 1 0 0 0 0 0 0

I should hope not.... (it would break call-by-value semantics, for one thing)

The closest you can get is something like

*> delayedAssign("fib6", fib5+fib4)
**> delayedAssign("fib5", fib4+fib3)
**> delayedAssign("fib4", fib3+fib2)
**> delayedAssign("fib3", fib2+fib1)
**> delayedAssign("fib2", 1)
*

> delayedAssign("fib1", 0)

*> fib6
*

[1] 5

(you can construct those assignments programmatically in a loop with a little extra work.)

-- Peter Dalgaard Center for Statistics, Copenhagen Business School Solbjerg Plads 3, 2000 Frederiksberg, Denmark Phone: (+45)38153501 Email: pd.mes_at_cbs.dk Priv: PDalgd_at_gmail.com ______________________________________________ R-help_at_r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.Received on Fri 08 Apr 2011 - 07:55:05 GMT

Archive maintained by Robert King, hosted by
the discipline of
statistics at the
University of Newcastle,
Australia.

Archive generated by hypermail 2.2.0, at Sat 09 Apr 2011 - 04:00:28 GMT.

*
Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help.
Please read the posting
guide before posting to the list.
*