I wouldn't suggest using `set!` that way -- I'm a big fan of internal `define`.
Sam On Thu, Jul 6, 2017 at 12:19 PM, David Storrs <[email protected]> wrote: > > > On Thu, Jul 6, 2017 at 8:53 AM, Sam Tobin-Hochstadt <[email protected]> > wrote: >> >> Just for clarity, here's an example using `set!` and `define`, >> although I wouldn't really suggest this style: >> >> #lang typed/racket >> >> (: f : Real -> Real) >> (define (f x) >> (define rand-value (random)) >> (define new-value (+ x rand-value)) >> (set! new-value (- new-value x)) >> new-value) >> >> Sam > > > You wouldn't suggest it because of the set! or because of the defines? > define seems like a useful construct -- if you're already inside the desired > scope then (define x ...) is a less verbose syntax than (let ((x ...)) ...) > and it doesn't introduce another layer of indentation. > > >> >> >> On Wed, Jul 5, 2017 at 10:52 PM, Alasdair McAndrew <[email protected]> >> wrote: >> > Well, after a bit of fiddling, I've discovered I can indeed do what I >> > need to, with a judicious use of "let" for creating a swag of random >> > values, >> > and ensuring that their use is all within the scope of let. So far, all >> > good! >> > >> > On Thursday, 6 July 2017 10:54:53 UTC+10, Royall Spence wrote: >> >> Sounds like two questions wrapped into one. When it comes to setting >> >> names to values, Scheme programming encourages the use of a "let" >> >> expression to bind values to names inside of a (usually narrow) scope >> >> rather than assigning a value to a variable. See more here: >> >> https://docs.racket-lang.org/guide/let.html >> >> >> >> As for the typed random value, the Flonum from (random) should be fine >> >> since a Flonum is also a Real. Can you provide a short example of >> >> runnable code that exposes the problem you're having? >> >> >> >> On Wed, Jul 5, 2017, at 08:39 PM, Alasdair McAndrew wrote: >> >> > I'm doing a little programming which requires the use of some random >> >> > numbers. Basically I add a random value at one stage, and subtract >> >> > it a >> >> > bit later. Something like this pseudo-code (where "x" is an existing >> >> > variable): >> >> > >> >> > set rand_value <- (random) >> >> > set new_value <- x + rand_value >> >> > >> >> > ... do stuff ... >> >> > >> >> > set new_value <- new_value - rand_value >> >> > >> >> > All values may be considered Reals. I tried to do this in Typed >> >> > Racket, >> >> > where x was of type "Real" and got errors about mismatched types: >> >> > "(random)" produces a "flonum". I was also using "set!" for the >> >> > assignment of the random value, which I understand to be poor >> >> > practice: >> >> > how would I do something like the above in a more "rackety" manner? >> >> > Thank you! >> >> > >> >> > -- >> >> > You received this message because you are subscribed to the Google >> >> > Groups >> >> > "Racket Users" group. >> >> > To unsubscribe from this group and stop receiving emails from it, >> >> > send an >> >> > email to [email protected]. >> >> > For more options, visit https://groups.google.com/d/optout. >> > >> > -- >> > You received this message because you are subscribed to the Google >> > Groups "Racket Users" group. >> > To unsubscribe from this group and stop receiving emails from it, send >> > an email to [email protected]. >> > For more options, visit https://groups.google.com/d/optout. >> >> -- >> You received this message because you are subscribed to the Google Groups >> "Racket Users" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> For more options, visit https://groups.google.com/d/optout. > > > -- > You received this message because you are subscribed to the Google Groups > "Racket Users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > For more options, visit https://groups.google.com/d/optout. -- You received this message because you are subscribed to the Google Groups "Racket Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.

