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

Reply via email to