It really is call by name. In your case, the name is "RAND()" The name in question is an expression (well, a closure) rather than it's value or a location containing its value.
-- Shmuel (Seymour J.) Metz http://mason.gmu.edu/~smetz3 ________________________________________ From: IBM Mainframe Assembler List <ASSEMBLER-LIST@listserv.uga.edu> on behalf of Charles Mills <charl...@mcn.org> Sent: Friday, February 9, 2018 4:23 PM To: ASSEMBLER-LIST@listserv.uga.edu Subject: Re: Man or boy test As I understand it, call-by-name means the following: Suppose for example if you coded a subroutine that expected some sort of parameter, and called it with a random number function, the random number function would (in most languages) get evaluated once before your subroutine was called, and your subroutine would see it as a constant. If you printed it three times in a loop it would be the same all three times. With call-by-name, 'RAND()' (or whatever) would not get evaluated by the caller but rather passed to your subroutine "as-is." It would get evaluated whenever your subroutine referenced it. If you printed it three times in a loop you would get three different values. It's not really "call by name" but rather "call with function" as opposed to "call with value of function." Charles