[Rd] Tricking Promises into Sending Info Via Args into Caller
The is.pos function below results in the variable, out, being set to TRUE if the first argument to is.pos is positive and to FALSE otherwise. It does this without using the return value or using scoping tricks to reach into the caller. Instead it tricks the promise into communicating one bit of information upwardly from the function to its caller via the second argument. One would have thought this to be impossible. Is this intended behavior? is.pos - function(i, x) { if (i 0) x; NULL } # in this example actual arg1 of is.pos is positive out - FALSE is.pos(1, out - TRUE) out # TRUE # in this example actual arg1 of is.pos is negative out - FALSE is.pos(-1, out - TRUE) out # FALSE -- Statistics Software Consulting GKX Group, GKX Associates Inc. tel: 1-877-GKX-GROUP email: ggrothendieck at gmail.com __ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
Re: [Rd] Tricking Promises into Sending Info Via Args into Caller
On Jan 12, 2013, at 17:02 , Gabor Grothendieck wrote: The is.pos function below results in the variable, out, being set to TRUE if the first argument to is.pos is positive and to FALSE otherwise. It does this without using the return value or using scoping tricks to reach into the caller. Instead it tricks the promise into communicating one bit of information upwardly from the function to its caller via the second argument. One would have thought this to be impossible. Is this intended behavior? Yes, this is a generic consequence of lazy evaluation: delayed and unpredictable side effects. Whether it is desirable is an open issue; it is the sort of thing that creates serious headaches for compiler constructors, but it is pretty much unavoidable once you include the lazy eval feature. is.pos - function(i, x) { if (i 0) x; NULL } # in this example actual arg1 of is.pos is positive out - FALSE is.pos(1, out - TRUE) out # TRUE # in this example actual arg1 of is.pos is negative out - FALSE is.pos(-1, out - TRUE) out # FALSE -- Statistics Software Consulting GKX Group, GKX Associates Inc. tel: 1-877-GKX-GROUP email: ggrothendieck at gmail.com __ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel -- Peter Dalgaard, Professor, Center for Statistics, Copenhagen Business School Solbjerg Plads 3, 2000 Frederiksberg, Denmark Phone: (+45)38153501 Email: pd@cbs.dk Priv: pda...@gmail.com __ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
Re: [Rd] Tricking Promises into Sending Info Via Args into Caller
In the spirit of this, but AFAIK not due to lazy evaluation, here's another illustration why it's easy to mistakes when doing inline assignments: x - 0 TRUE (x - 1) [1] TRUE x [1] 1 FALSE (x - 2) [1] FALSE x [1] 1 (x - 3) FALSE [1] FALSE x [1] 3 FALSE (x - 4) [1] FALSE x [1] 4 /Henrik On Sat, Jan 12, 2013 at 9:19 AM, peter dalgaard pda...@gmail.com wrote: On Jan 12, 2013, at 17:02 , Gabor Grothendieck wrote: The is.pos function below results in the variable, out, being set to TRUE if the first argument to is.pos is positive and to FALSE otherwise. It does this without using the return value or using scoping tricks to reach into the caller. Instead it tricks the promise into communicating one bit of information upwardly from the function to its caller via the second argument. One would have thought this to be impossible. Is this intended behavior? Yes, this is a generic consequence of lazy evaluation: delayed and unpredictable side effects. Whether it is desirable is an open issue; it is the sort of thing that creates serious headaches for compiler constructors, but it is pretty much unavoidable once you include the lazy eval feature. is.pos - function(i, x) { if (i 0) x; NULL } # in this example actual arg1 of is.pos is positive out - FALSE is.pos(1, out - TRUE) out # TRUE # in this example actual arg1 of is.pos is negative out - FALSE is.pos(-1, out - TRUE) out # FALSE -- Statistics Software Consulting GKX Group, GKX Associates Inc. tel: 1-877-GKX-GROUP email: ggrothendieck at gmail.com __ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel -- Peter Dalgaard, Professor, Center for Statistics, Copenhagen Business School Solbjerg Plads 3, 2000 Frederiksberg, Denmark Phone: (+45)38153501 Email: pd@cbs.dk Priv: pda...@gmail.com __ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel __ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel