问题标签 [call-by-need]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
12245 浏览

programming-languages - 什么是按需调用?

我想知道什么是按需调用。

虽然我在维基百科中搜索并在这里找到它:http ://en.wikipedia.org/wiki/Evaluation_strategy ,但无法正确理解。如果有人可以举例说明并指出按值调用的区别,那将是一个很大的帮助。

0 投票
1 回答
818 浏览

haskell - Haskell:惰性评估/按需调用如何“缓存”友好

几个月来,我一直在业余时间学习 Haskell。关于内存子系统(L1、L2、L3 缓存),我想知道 Haskell 在当前库存硬件上的表现如何。有人可以指出任何关于 Haskell 的缓存友好性的报告/研究,因为它的延迟评估/按需调用?有没有办法让我们获得关于发生了多少数据缓存未命中和指令缓存未命中的信息,并查看这是否是由于语言的惰性评估性质造成的?

谢谢。

0 投票
1 回答
452 浏览

semantics - 按需要调用和按名称调用减少关系语义

在尝试总结我对 lambda 演算的知识时,我了解到我对按值调用非常熟悉,但我从未见过按需要减少语义。我知道定义,但很高兴看到确切的含义。

这就是我对按需调用和按值调用的内容(不是很详细的描述):

按值调用

小步

  • 价值观

    价值观

  • β-还原

    βv

  • 评估上下文

    语境

    cbv 上下文

Big Step(带闭包和环境)

  • 闭包

    关闭

  • 环境

    环境

  • 减少

    CBV变种

    CBV林

    cbv 应用程序


点名

小步

  • β-还原

    Nβv

  • 评估上下文

    cbn上下文

    cbn 评估上下文


估计还有一大步,肯定和call-by-value很像,不过还是再看一次比较好。

因此,如果有人可以根据需要扩展我的列表,我将不胜感激。

0 投票
2 回答
683 浏览

r - 按需调用的简单示例

我试图理解“按需调用”背后的定理。我确实理解这个定义,但我有点困惑。我想看一个简单的例子,它展示了按需调用的工作原理。

在阅读了一些之前的帖子后,我发现 Haskell 使用了这种评估。是否还有其他支持此功能的编程语言?

我阅读了有关 Scala 的按名称调用的信息,并且我确实理解按名称调用和按需要调用是相似的,但不同之处在于按需要调用将保留评估值。但我真的很想看到一个真实的例子(它不必在 Haskell 中),它显示了按需调用。

0 投票
1 回答
87 浏览

parameters - 计划中的按需调用

我有这段代码知道参数是通过需要使用调用传递的:

我觉得我错过了一些东西,但是在需要调用foo这个对象 as的调用中f,它会计算f一次,然后永远不会更新resand n。这个对吗?我错过了什么吗?

谢谢你。

0 投票
0 回答
13 浏览

lazy-evaluation - 计算在按名称调用和按需要调用下执行的中缀操作

提供的功能(从惰性函数式编程语言的角度来看):

提供评估,我如何合理地争论函数调用了多少添加:

fun1(1)
fun2(1)

会在call-by-needand下产生call-by-name吗?当我试图解决这个问题时,借助两种评估技术的知识,我会说:

call-by-need:
fun1(1)= n + 1
fun2(1)= n + 1

call-by-name:
fun1(1)= 2n + 1
fun2(1)= 2n + 1

但是任何人都可以验证上述值是否正确吗?两者之间的主要区别(根据我的理解)是call-by-name每次使用变量时都需要重新评估它们。情况并非如此call-by-need。比如一个例子:

fun1(1)= 2n + 1\

其中 n = 1 计算为:

let n1= n0+ n0
let x = ( n0+ n0) +n1
总共进行了 3 次加法,因为n1右边的值是由左边的加法 ( n0+ n0) 推断出来的。

我什至可以说,call-by-need直到fun1(1)and的结果fun2(1)实际上是needed.

谁能帮我指出正确的方向?我似乎无法弄清楚评估技术如何影响通过对上面的函数调用(以及抽象地对任何其他函数调用)执行的中缀操作(+ 或任何其他操作)的数量。

编辑:我的重点是了解哪里出了问题,如果我的结果不正确,以及我如何继续了解如何更准确地计算它们。我还可以补充一下,这是一个练习,包括多个类似的练习——每个练习都需要了解上述内容。