r - 按需调用的简单示例

标签 r haskell lazy-evaluation call-by-need

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

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

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

最佳答案

功能

say_hello numbers = putStrLn "Hello!"

忽略其 numbers争论。下 call-by-value语义,即使参数被忽略,函数调用位置的参数也可能需要被评估,这可能是因为程序的其余部分所依赖的副作用。

在 Haskell 中,我们可以调用 say_hello作为
say_hello [1..]

哪里[1..]是自然数的无限列表。在按值调用语义下,CPU 会试图构建一个无限列表并且永远不会到达 say_hello根本!

Haskell 只是输出
$ runghc cbn.hs
Hello!

对于不太戏剧化的例子,前十个自然数是
ghci> take 10 [1..]
[1,2,3,4,5,6,7,8,9,10]

前十个赔率是
ghci> take 10 $ filter odd [1..]
[1,3,5,7,9,11,13,15,17,19]

call-by-need语义上,每个值——即使是上面例子中概念上无限的值——仅在需要的范围内进行评估,仅此而已。

关于r - 按需调用的简单示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54261834/

相关文章:

用于关闭当前选项卡的 R Studio Server 快捷方式

haskell - Bool 类 - 像 Num?

haskell - Pandoc 在 GHC 7.8.2 上编译失败

一流属性访问的 Python 自定义初始化

R:列集中的最后一个非 NA 值

r - 修复多个警告 "unknown column"

haskell - 如何获取字符串 'aa' 、 ab' 到 'yz' 、 'zz' ?

c# - 强制 IEnumerable<T> 在不调用 .ToArray() 或 .ToList() 的情况下进行评估

jquery - 图像延迟加载(jQuery)后如何更改CSS?

r - 根据 R 中另一列中的字符串对维恩图的一列中的所有值进行计数