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

From: IBM Mainframe Assembler List <> on behalf 
of Charles Mills <>
Sent: Friday, February 9, 2018 4:23 PM
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."


Reply via email to