It's all about tradeoffs. Also, you did not provide a definition nor any examples for randel, but I suspect that (rand =: randel bind l) will do what you are asking for.
Good luck, -- Raul On Mon, Nov 27, 2017 at 12:03 PM, Andrew Dabrowski <[email protected]> wrote: > On 11/26/2017 01:27 PM, Raul Miller wrote: >> >> You don't really mean that. ;) > > I do. >> >> >> A function is a relationship between argument and result where there's >> each argument has exactly one result. > > That's the mathematical definition. I'm talking about programming. >> >> So a function of no arguments >> would have no result. Or, if we are being generous, we could declare >> that it has a constant argument (and, thus, a constant result). So >> that would be a constant. >> >> What you are asking for, I think, actually, is a procedure which >> produces different results at different times based on whatever >> obscure variables or whatever it depends on. (And your example of a >> random number generation process sort of illustrates that concept.) > > Is J supposed to be a pure functional language, like Haskell? Outside of > that narrow category functions like this are common, and hard to get around > for io - input functions are like this. >> >> >> (But when used in a tacit definition, you can just use your randdie as >> is - it will ignore its arguments so put it where ever that fits.) >> >> Anyways... the technical answer is "no". > > Thanks. >> >> The practical answer is "but >> that should not matter" > > Maybe. It does make some things more verbose. For example, suppose I need > a random real in a function. If I call ?0 in a tacit function the > expression is evaluated only once, at the time of definition, and thereafter > whenever the function is called the same value of ?0 is used. Similarly, I > defined a function randel to take a random element from a list. If I want > to take a random element of a list l in a tacit function, I can't just do > > rand =: randel l > > because then rand is a constant: the body of the definition is not > reevaluated whenever rand is called. To get the desired behavior I could > use > > rand =: randel @: (3 : 'l') > > which is a bit gross. Why does J conflate the category of tacit definitions > with that of definitions that don't need to be reevaluated? > >> and the obscure answer is that you can map a >> variable to a file if you really want to extend the reach of your >> system (but that has all sorts of implications which you probably were >> not looking for, so let's stick with the other two answers?) > > I have absolutely no idea what this means, but I guess it's not important. >> >> >> Anyways, I hope this helps (but it probably doesn't...). >> >> Thanks, >> > > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
