方案中的延续传递风格?

2024-03-23

我遇到了这段代码在维基百科上 http://en.wikipedia.org/wiki/Continuation-passing_style:

(define (pyth x y k)
    (* x x (lambda (x2)
        (* y y (lambda (y2)
            (+ x2 y2 (lambda (x2py2)
                (sqrt x2py2 k))))))))

文章说该代码是另一段代码的 Continuation-Passing 版本:

(define (pyth x y)
    (sqrt (+ (* x x) (* y y))))

然而,我很困惑:这到底是如何运作的?这里如何将数字乘以 lambda?(* x x (lambda ...))


在维基百科的例子中,*与以下意思不同*在传统的例子中。

我会将维基百科的示例重写为:

(define (pyth x y k)
    (cps-* x x (lambda (x2)
        (cps-* y y (lambda (y2)
            (cps-+ x2 y2 (lambda (x2py2)
                (cps-sqrt x2py2 k))))))))

在这种形式中,每个cps-xxx函数执行指定的操作,然后将结果传递给最后一个参数。你可以这样称呼它:

(pyth 2 3 display)

将 2 和 3 相乘,得到 6,然后将 6 传递给display。 (实际上你想将结果传递给cps-display显示其初始参数,然后调用another函数指定为其最后一个参数)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

方案中的延续传递风格? 的相关文章

  • 如何反转列表?

    在Scheme中反转列表的函数是什么 它需要能够处理嵌套列表 所以如果你做类似的事情 reverse a b c d e 你会得到 e b c d a 作为输出 我应该如何解决这个问题 我不仅仅是在寻找答案 而是寻找有助于我学习的东西 de
  • 为什么 eval 是邪恶的?

    我知道Lisp和Scheme程序员通常会这么说eval除非绝对必要 否则应避免 我已经看到了对几种编程语言的相同建议 但我还没有看到反对使用的明确论据列表eval 在哪里可以找到使用潜在问题的说明eval 例如 我知道以下问题GOTO在过程
  • 有人可以向我解释“卫生”的概念吗(我是一名方案程序员)?

    所以 我是 r6rs 方案的新手 正在学习宏 谁能给我解释一下 卫生 是什么意思 提前致谢 卫生经常在宏的上下文中使用 卫生宏不使用可能会干扰正在扩展的代码的变量名称 这是一个例子 假设我们想要定义or带有宏的特殊形式 直观地说 or a
  • 如何避免 Racket 中的加载循环?

    我有一套非常简单的 rkt来源 例如其中的 a rkt 和 b rkt 我希望能够写 require a rkt 在 b rkt 中 反之亦然 现在我面临有关 加载周期 的错误 我可以在不添加单元的情况下使用裸模块解决这个问题吗 Racke
  • 有没有办法像 withCString 一样链接函数?

    有没有办法链接像这样的函数withCString 我的意思是任何 函数看起来像f Foo gt CFoo gt IO a gt IO a 例如 假设有一个函数cFunc CString gt CFoo gt CBar gt IO 通常 我会
  • eq 之间的区别?和 = 在方案中?

    gt eq 1 1 t gt eq 1 1 1 1 f gt 1 1 1 1 t 这是DrScheme 中的交互窗口 有人可以解释一下 和 eq 之间的区别吗 在计划中 比较数字 等式 测试参数是否表示内存中的同一数据对象 当量 应该在第二
  • 将函数列表应用于数字

    据我了解 Scheme Racket 中的函数 如 map foldr 和 filter 可以做一些奇妙的事情 例如将函数应用于元素列表 是否可以将函数列表应用于单个元素 我想生成每个函数产生的值 然后找到它们的最大值 谢谢 对于第一部分
  • 了解Scheme函数

    我们的编程语言练习考试中给出了以下问题 我很难理解它是如何工作的 有人能告诉我代码流程是什么吗 我已经在球拍中运行过它并且知道答案是什么 看起来第一个 lambda 函数将其他两个函数作为参数 但输入在哪里 lambda x 2 and l
  • 方案作业

    当我每次得到值 10 时评估以下表达式 lambda x lambda set x x 10 x 0 不过 我只是通过用名称抽象上述过程来进行修改 并在每次值增加 10 时调用 foo define foo lambda x lambda
  • 有没有办法检查一个列表的所有元素是否都包含在球拍的另一个列表中?

    我想要一个执行类似操作的函数 gt function 1 2 3 4 1 2 3 4 5 t 在这种情况下返回 t 因为第一个列表的所有元素都包含在第二个列表中 有没有一个函数可以做到这一点而不必担心顺序 在这种情况下 您不会将列表进行比较
  • 将字符串附加到 IronScheme 中的现有文本文件

    我们正在尝试使用 IronScheme 构建一个日志文件 并且我们已经使用racket 为其编写了代码 它在球拍中工作正常 但 IronScheme 会抛出错误 这是我们目前所拥有的 define write to log lambda w
  • 方案按引用传递

    如何在方案中通过引用传递变量 我想要的功能的示例 define foo lambda x set x 5 define y 2 foo y display y outputs 5 另外 有没有办法通过引用返回 See http commun
  • 经验丰富的计划者的 get-first、get-next 和 waddle 函数

    define get first lambda l call with current continuation lambda here set leave here waddle l leave quote define get firs
  • 将列表传播到父代 sexp 中

    在任何 lisp 中是否有一种形式可以在父 sexp 中 传播 列表 喜欢 spread 1 2 3 gt 1 2 3 有两种方法可以做到这一点 哪个更好取决于您最终想要什么 一般来说 您可以使用 inside 反引号 表格如下 被评估以生
  • 如何获取 SICP、Scheme、练习 2.78 等中的 put 和 get 函数

    我正在尝试在 SICP 中做练习 2 78 但 put 和 get 函数未知 我尝试过多种语言 比如相当大 racket r5rs mit scheme mzscheme等 我什至下载了SICP支持 http www neilvandyke
  • Racket 中的“match”可以具有带有来自外部作用域的变量的模式吗?

    考虑以下示例 lang racket match cat doge a b match b a t f Not a pair 如果我想匹配头部和尾部相同的对 我可能会这样写 但这不起作用 因为第二个a被绑定为一个新变量 并且匹配任何内容 是
  • 模拟Scheme中Python的范围

    如何在Scheme中创建连续数字的列表 在Python中创建一个从1到10的整数列表是range 1 11 方案有等效的吗 mzscheme version gives Welcome to Racket v5 2 1 Edit Per h
  • 方案语言:合并两个数字

    如何将列表中的两个整数合并为一个 方案中 例子 11 223 gt 11223 假设列表恰好有两个元素 并且都是数字 define merge numbers lst let 1st number gt string first lst 2
  • Scheme/Lisp 嵌套循环和递归

    我正在尝试解决方案中的一个问题 该问题要求我使用嵌套循环或嵌套递归 例如我有两个列表 我必须检查它们的笛卡尔积的条件 解决这些类型问题的最佳方法是什么 有关如何简化这些类型的函数的任何指示吗 I ll elaborate a bit sin
  • Lisp 中的 (定义 (平均 ....))

    我只是在玩scheme lisp 并正在考虑如何纠正我自己的定义average 我不确定如何做一些我认为需要的事情 定义一个接受任意数量参数的过程 计算这些参数 将参数列表传递给 以将它们加在一起 有人有定义的例子吗average 我似乎对

随机推荐

  • 谷歌新闻,左导航 CSS 技巧?或 jQuery 技巧

    我对此很陌生 查看 Google 新闻 上下滚动页面时请注意左侧导航 看看是如何滚动一小段 然后在消失之前粘在页面顶部的吗 关于如何做到这一点有什么想法吗 jQuery 和 CSS 可以复制这一点吗 如果是这样 有什么建议吗 YouTube
  • 未找到 NetBeans 10 JUnit Jar

    我新安装了 NetBeans 10 尝试运行我刚刚创建的一些初始单元测试时 出现以下错误 The
  • Ellipsize 不适用于自定义 listView 内的 textView

    我有一个 listView 其中包含由下面的 xml 布局定义的自定义对象 我希望 id 为 info 的 textView 在一行上省略 并且我尝试使用属性 android singleLine true android ellipsiz
  • jenkinsfile 管道按代理分组阶段

    我有什么 我正在尝试使用两种不同的代理来运行我的詹金斯管道 我想在同一个代理上执行某些流程 但到目前为止我无法执行此操作 因为代理定义只有 2 个选项 我可以在管道顶部执行 或者我可以将代理定义到每个阶段 我有这个 pipeline age
  • 用 CSS 使图像变灰?

    使用 CSS 让图像显示为 灰色 的最佳方法 如果有 是什么 即不加载单独的灰色图像版本 我的上下文是 表格中的行在最右侧的单元格中都有按钮 并且某些行需要看起来比其他行更亮 因此 我当然可以轻松地使字体变亮 但我也希望使图像变亮 而不必管
  • Python pandas系列:将浮点数转换为字符串,保留空值

    转换为字符串后如何保留空值 我正在处理社会安全号码 需要在浮点数和字符串之间来回切换 import pandas as pd import numpy as np x pd Series np nan 123 np nan 456 dtyp
  • 如何使用phpmyadmin导出所有数据库

    可以使用phpMyadmin一次性导出所有数据库吗 如果不是 最好的方法是什么 提前致谢 以下是使用 phpMyAdmin 导出所有 mySQL 数据库的步骤 2015 年 12 月 随着 phpMyAdmin 的发展 添加了新功能 打开
  • 当 setup.py 使用 Python 版本 3 解释器运行时,如何构建 py2 轮包?

    我有一个应该是 Python 的包仅版本 2但需要构建运行版本 3 解释器 The setup py这个包的内容看起来像点击 from setuptools import setup setup python requires lt 3 0
  • “编辑前 200 行”不适用于 SQL Server 16.0 - Express Edition

    我正在尝试在 SQL Server Express 版本中 编辑前 200 行 但它返回的是空白文件 如下所示 显示带有禁用工具的空白文件 https i stack imgur com CvpH7 png 我已经在本地安装了这个 SQL
  • 将渐变效果应用于模糊视图

    如何在 Swift 中添加具有模糊效果的渐变视图 我可以很轻松地向视图添加渐变层 CAGradientLayer 我还可以单独添加模糊视图 UIVisualEffectView 如何将两者结合起来创建一个模糊视图 该视图还具有渐变元素 其中
  • 当我单击画布并拖动鼠标时,光标会变为文本选择光标。我怎样才能防止这种情况发生?

    这是一个小提琴 http jsfiddle net MZ9Xm http jsfiddle net MZ9Xm 注意 以下情况发生在 Chrome 22 0 1221 1 中 但不会发生在 Firefox 14 0 1 中 Ubuntu l
  • Java 随机崩溃(可能的罪魁祸首:ntdll.dll?)

    我有一个用 Java 编写的程序 并使用 Windows 任务计划程序设置为每 5 分钟运行一次 它执行 C Program Files Java jre7 bin javaw exe 并传递 jar 文件和所有命令行参数 在大多数情况下
  • 如何安全地镜像 git 存储库?

    我想通过后台作业镜像一些 git 存储库 git clone mirror and git remote update不会保留通过强制推送未引用的对象 但我也想保留这些对象以防黑客攻击 有没有什么工具可以执行安全的 git 镜像 虽然缺少
  • Tone.PitchShift 和 Howler.js 问题

    我喜欢在我的 Meteor 应用程序中使用 Howler js 然而 播放速率功能导致了我不想要的音调变化 我只想延长时间 并保持音调 因此 我的解决方案是对其进行音调变换以 纠正 音调 看起来很简单 这就是我选择使用的原因https to
  • 在 Qt 中显示 QImage 的灰度并调整其大小

    我已经能够使用如下内容在 Qt 中的标签中显示图像 transformPixels 0 0 1 imheight imwidth 1 sets unsigned char imageData unsigned char fullCharAr
  • 与Netty相比,vert.x如何实现卓越的性能?

    最近的TechEmpower 性能基准 http www techempower com benchmarks 一直在 Netty 之上展示 vert x 有时数量很大 根据其网站 vert x 使用 Netty 来实现 大部分网络 IO
  • jquery:无法获取div的“value”属性

    这是我的 chrome javascript 控制台的屏幕截图 展示了我的困境 我真的无法理解为什么我无法获取 值 属性 class 属性工作得很好 所以我认为同样应该适用于 value 我在我的应用程序中测试的代码 coffeescrip
  • 没有WebRTC的nodeJS中的简单SIP电话

    您好 我需要实现类似 SIP 电话的功能 但使用不带 WebRTC 的 经典 SIP 大多数 JS 库都专注于基于 websockets 和 WebRTC 的 SIP 但在我的基础设施中 我没有 WebSocket 有像 JsSIP 这样的
  • PHP preg_match_all:提取逗号分隔列表

    例如 我有以下字符串 WIDGET TEST abc 456 我希望能够使用 preg match all 返回逗号分隔参数的数组 有人可以帮我解决我需要的正则表达式吗 我已经尝试过 并且返回以下查询 a b preg match all
  • 方案中的延续传递风格?

    我遇到了这段代码在维基百科上 http en wikipedia org wiki Continuation passing style define pyth x y k x x lambda x2 y y lambda y2 x2 y2