什么是"按名称呼叫"?

for*_*ana 15 evaluation scheme scala lazy-evaluation

我正在做一个家庭作业,我们被要求以我们开发的某种语言(使用Scheme)实施名为"按名称呼叫"的评估策略.

我们在Scala中得到了一个例子,但我不明白"按名称呼叫"的工作原理以及它与"按需呼叫"有何不同?

Dou*_*rie 26

Call-by-need是一个按名称调用的memoized版本(参见维基百科).

在按名称调用时,每次使用时都会对参数进行求值,而在需要调用时,会在第一次使用时对其进行求值,并记录值,以便随后不需要重新求值.


Ric*_*ton 11

按名称调用是一个参数传递方案,其中参数在使用时进行评估,而不是在调用函数时进行评估.这是伪C中的一个例子:

int i;
char array[3] = { 0, 1, 2 };

i = 0;
f(a[i]);

int f(int j)
{
    int k = j;    // k = 0
    i = 2;        // modify global i
    k = j;        // The argument expression (a[i]) is re-evaluated, giving 2.
}
Run Code Online (Sandbox Code Playgroud)

使用参数表达式的当前值访问时,将对参数表达式进行延迟计算.