DrRacket 中的宏步进器

2023-12-26

在链接上http://www.ccs.neu.edu/home/ryanc/macro-stepper/tutorial.html http://www.ccs.neu.edu/home/ryanc/macro-stepper/tutorial.html有使用宏步进器的说明。

但是,当我要尝试时,我无法在非零的定义中得到 myor 的第二次展开?函数,只有第一个。另外,我没有“上一学期”和“下一学期”按钮。

所以我的问题是:我必须如何配置宏步进器才能获得第二次扩展,就像教程中一样?


我假设你的源程序看起来像这样:

#lang racket
(define-syntax myor
  (syntax-rules ()
    [(myor e) e]
    [(myor e1 . es)
     (let ([r e1]) (if r r (myor . es)))]))
(define (nonzero? r)
  (myor (negative? r)
        (positive? r)))

短篇小说:使用语法大小写而不是语法规则暂时;似乎存在一些与宏步进器和语法规则相关的错误。我已经发送了致 Racket 开发者,希望这个问题能尽快得到解决。这语法大小写上述程序的版本如下所示。

#lang racket

(define-syntax (myor stx)
  (syntax-case stx ()
    [(_ e) #'e]
    [(_ e1 . es)
     #'(let ([r e1]) (if r r (myor . es)))]))

(define (nonzero? r)
  (myor (negative? r)
        (positive? r)))

下面是更长的故事...

当我在 5.2.1 预发行版下运行您的程序时,我在宏步进器中看到以下内容,并将宏隐藏设置为“标准”:

(module anonymous-module racket
  (#%module-begin
   (define-syntax myor
     (syntax-rules () [(myor e) e] [(myor e1 . es) (let ([r e1]) (if r r (myor . es)))]))
   (define (nonzero? r)
     (let:26 ([r:26 (negative? r)]) (if:26 r:26 r:26 (myor:26 (positive? r)))))))

这看起来是错误的。它仅扩展了一种用途myor出到用途if。很奇怪!

让我们看看 Racket 5.2 下的情况......

(module anonymous-module racket
  (#%module-begin
   (define-syntax myor
     (syntax-rules () [(myor e) e] [(myor e1 . es) (let ([r e1]) (if r r (myor . es)))]))
   (define (nonzero? r) (let ([r (negative? r)]) (if r r (myor (positive? r)))))))

啊。好的,我可以确认我看到了与您在 Racket 5.2 以及预发行版中看到的相同问题。

该错误似乎与“宏隐藏”功能的行为有关,该功能在设置为标准时试图不让您因完整扩展而不知所措。如果将其设置为“禁用”,您将看到宏调试器将显示扩展的完整、不加修饰的荣耀,并且它确实包含我们期望看到的扩展:

(module anonymous-module racket
  (#%module-begin
   (define-syntaxes (myor)
     (lambda (x)
        ; ... I'm omitting the content here: it's way too long.
     ))
   (define-values:20 (nonzero?)
     (lambda:21 (r) (let-values:22 (((r) (#%app:23 negative? r))) (if r r (#%app:24 positive? r)))))))

我会写一个并将其发送给 Racket 开发人员。

如果您使用以下方式编写宏语法大小写,相对于语法规则,它似乎与宏步进器配合使用效果更好。

#lang racket

(define-syntax (myor stx)
  (syntax-case stx ()
    [(_ e) #'e]
    [(_ e1 . es)
     #'(let ([r e1]) (if r r (myor . es)))]))

(define (nonzero? r)
  (myor (negative? r)
        (positive? r)))

当我完成这个步骤时,它似乎工作得更好。因此,无论触发该错误的是什么,它似乎都是与宏步进器的某种交互,并且语法规则。所以尝试使用语法大小写反而。

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

DrRacket 中的宏步进器 的相关文章

  • 大括号 {} 替换 Racket 中的“开始”

    是否可以有一个宏 使用大括号 来表示一个语句块 从而替换 begin 关键字 因此 代替 if condition begin statement1 statement2 statement3 statement4 else stateme
  • 无法在 C++ 中使用宏定义类

    我想生成许多几乎没有什么区别的子类 所以我想使用宏来简化我的工作 宏定义如下 define DECLARE SUB CLASS sub class name base class name value1 class sub class na
  • 使用 Intellij 调试 Scala 宏

    我有一个 sbt 项目 我运行 gen idea 来设置它以与 Intellij 12 4 一起使用 在一个项目中是我的主代码 另一个项目中有我的宏代码 当尝试通过以下测试文件调试我的宏时http docs scala lang org o
  • 模拟Scheme中Python的范围

    如何在Scheme中创建连续数字的列表 在Python中创建一个从1到10的整数列表是range 1 11 方案有等效的吗 mzscheme version gives Welcome to Racket v5 2 1 Edit Per h
  • 宏扩展忽略了 MSVC 中的一些标记

    我在 msvc 编译器中遇到宏扩展问题 我希望将以下代码扩展为F x 它在 gcc 和 clang 上执行 但 msvc 将其扩展为F忽略x令牌 这里发生了什么 define S s s define F define M S S F x
  • Scheme/Lisp 嵌套循环和递归

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

    在 Scala 宏中 我想做这样的事情 我有一个Tree 可能很大 现在我想找到这棵树的一个具有某种具体形式的子树 例如Apply 现在我想创建一棵新树 它是原始树的副本 但找到的子树被其他树替换 例如 通过类似的方法 我可以用调用某些其他
  • Letrec 和可重入延续

    有人告诉我 以下表达式的计算结果为 0 但许多方案的实现将其计算为 1 let cont f letrec x call with current continuation lambda c set cont c 0 y call with
  • Jupyter (iPython) 笔记本中的 Latex 宏未由 github 渲染

    我的 Jupyter 笔记本 ipynb 中有一个 Markdown 单元 其中包含以下内容 newcommand paren 1 left 1 right paren beta 2 该文件位于 Github 存储库中 LaTex 宏应用程
  • 方案字符串追加?递归复制字符串

    设计一个名为 string dup 的程序 它使用一个字符串 s 和一个数字 n 并返回一个由 s n 次连接而成的字符串 每个 s 实例之间有空格 即 string dup a 3 gt a a a 不使用复制 但我想我们可以使用字符串追
  • 如何驯服 Windows 标头(有用的定义)?

    在其中一个答案中this https stackoverflow com questions 1394132 macro and member function conflict问题jalf https stackoverflow com
  • 在Racket中将结构递归转化为累积递归

    我有一些代码来查找最大高度并将其替换为关联的名称 身高和姓名有单独的列表 每个列表的长度相同且非空 我可以使用结构递归来解决这个问题 但必须将其更改为累积递归 而且我不确定如何做到这一点 我见过的所有例子都让我困惑 有人能够将代码变成使用累
  • 学习 LISP 的最佳方法是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 宏未产生所需的结果

    我是 C 新手 之前来自 Python 我对这部分代码感到困惑 include
  • 在 C 语言中替换宏内的宏

    我正在尝试使代码部分可重用 我下面的评论片段没有达到我想要的效果 define NAME ABC define LOG SIZE NAME LEN 我想LOG SIZE决心ABC LEN 我尝试过使用 但没能让它发挥作用 LOG SIZE在
  • 如何将Scheme中的函数应用于另一个函数返回的参数列表?

    假设有两个函数 f 和 v 进一步假设 v 返回长度为 n 的列表 并且 f 需要恰好 n 个参数 我正在Scheme中寻找正确的语法 以将f应用于v返回的列表 如果我使用语法 f v v arguments 然后我收到一个关于 f 需要
  • 我在函数的最后一次递归调用中得到“方案应用程序而不是过程”

    所以这是代码 define time prime test n newline display n start prime test n runtime define start prime test n start time if pri
  • 宏内调用函数和宏的区别?

    我的难题是以下示例 defmacro macro1 x println x defn func1 x println x defmacro macro2 x macro1 x func1 x defmacro macro3 x func1
  • 如何使用语法检查变量的度量(名义/序数/规模)?

    我想使用语法找到变量的度量 然后在 If 语句中使用它 使用语法可以吗 例如 如果我有两个变量a 标称 和b 序数 DO IF a is nominal END IF 您可以创建数据中所有名义变量的列表 在以下示例中 列表将存储在宏调用下
  • 避免函数内装箱/拆箱

    对于数字密集型代码 我编写了一个具有以下签名的函数 def update f Int Int Double gt Double Unit 然而 因为Function3不是专门的 每个应用程序f结果对 3 个参数和结果类型进行装箱 拆箱 我可

随机推荐

  • MYSQL 和 Phpmyadmin 没有显示相同的数据库

    我正在运行 XAMMP 我通过 Homebrew 安装了 MYSQLbrew install mysql 然而当我跑步时show databases 登录后在终端中mysql u root 我明白了 Database information
  • 查找 PHP 服务器的可用端口

    PHP 5 4 带有一个用于开发目的的内置服务器 这是我已经等待了几个月的事情 因为到目前为止 我不得不编写一个 PHP 脚本来侦听传入的连接并处理它们 因为我不想惹麻烦 以及安装实际服务器的开销 我要担心的主要事情是 如何分配端口 在我的
  • 如何将现有的nodejs服务器应用程序连接到Azure SQL数据库

    任何人都可以请建议 我有一个在 azure 上运行的现有 Nodejs 服务器 在 Linux 上运行节点 10 14 项目代码位于 github 上 当我推送更改时 它们会自动推送到 azure 我已经通过Azure门户设置了数据库服务器
  • 为什么 Facebook 淹没了我的网站?

    每个半小时我都会收到大量的请求http www facebook com externalhit uatext php http www facebook com externalhit uatext php 我知道这些请求意味着什么 但这
  • Django url 调试器

    我正在开发一个 Django 应用程序 随着时间的推移 URL 不断增长 我现在有很多这样的视图 由于我做了一些改变 一个视图开始出现故障 当我尝试获取时http example com foo edit profile http exam
  • 将 C 字符串转换为二进制表示形式

    在 ANSI C 中 我们如何将字符串转换为二进制字节数组 所有的谷歌搜索和搜索都给了我 C 和其他而不是 C 的答案 我的一个想法是将字符串转换为 ASCII 然后将每个 ASCII 值转换为其二进制 呃 我知道这是最愚蠢的想法 但我不确
  • React-Native-Video -> 如何保存视频

    我目前正在使用react native video 并通过该包播放HLS 视频流 有人知道如何将视频下载到手机图库吗 查看该包没有任何方法 并且想知道是否还有另一个包可以使用 Thanks 在我的应用程序中 我使用以下命令下载视频RNFS
  • Azure 中的 Web 应用服务每天重新启动多次,日志中没有错误

    我正在 Azure Web 应用服务中运行 ASP Net Web API 2 应用程序 Web 服务每天会重新启动多次 5 6 次 而不会提前发出任何通知或错误消息 我扩展到两个实例 始终不依赖于负载 并且两个实例同时重新启动 我确实设置
  • Sql 服务器表分区 - 我可以跨服务器分配表吗?

    我读过很多网站 指南等 另请注意 我无法测试我所要求的内容 因为没有两台计算机 表分区简单地意味着表被逻辑划分 这样特定范围仅由特定分区处理 从而减少负载并允许并行性 提到分区位于不同的硬盘上 但从未提到分区位于不同的计算机上 那可能吗 例
  • 每行具有不同标准差的 Numpy 数组

    我想要一个NxM矩阵 其中每行中的数字是从不同正态分布生成的随机样本 相同mean但标准差不同 以下代码有效 import numpy as np mean 0 0 same mean stds 1 0 2 0 3 0 different
  • Kendo UI 中单击自定义工具栏时如何调用函数?

    我想创建一个自定义工具栏 这是我的代码 toolbar text Go to Add User Page className k grid custom imageClass k add function createUser alert
  • 不包括程序集版本的 WCF 扩展

    正如所讨论的here http marcgravell blogspot com 2009 11 controlling wcf protobuf net at html 我正在尝试添加 WCF 端点扩展 我已经让它工作了 但我需要包含完整
  • 哪个是支持代码重新加载的简约 python wsgi 开发服务器? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 据我所知 wsgiref 无需重新加载代码 CherryPy 不仅仅是服务器 mod wsgi 所有 apache 开销 Paste https
  • 在 StreamBuilder 中使用选择器(提供程序)时重建不必要的小部件

    我正在使用一个Selector当 Bloc 中的数据发生更改时会重建 这很好 但是当数据发生变化时 它会重新加载整个树 而不仅仅是选择器内的构建器 就我而言 选择器位于 StreamBuilder 内 我需要这个 因为流已连接到 API 因
  • Pandas DataFrame 按两列分组并获取第一个和最后一个

    我有一个DataFrame喜欢跟随 df pd DataFrame id 1 1 2 3 2 value a b a a c Time 6 Nov 2012 23 59 59 0600 6 Nov 2012 00 00 05 0600 7
  • zend框架丢失会话

    我正在尝试在我的 Zend 框架应用程序中实现 Flash 上传器 但我在会话中遇到问题 Flash 不发送任何 cookie 标头 这就是会话丢失的原因 我试图将 sessionId 作为 post 参数发送 并在我的引导文件中添加了 s
  • 从 File.ReadAllBytes (byte[]) 中删除字节顺序标记

    我有一个 HTTPHandler 它正在读取一组 CSS 文件并将它们组合起来 然后对它们进行 GZipping 但是 某些 CSS 文件包含字节顺序标记 由于 TFS 2005 自动合并中的错误 并且在 FireFox 中 BOM 被作为
  • 如何使用点绘制 pandas 数据框的两列

    我有一个 pandas 数据框 想要绘制一列中的值与另一列中的值 幸运的是 有plot与数据帧关联的方法似乎可以满足我的需要 df plot x col name 1 y col name 2 不幸的是 它看起来像在情节风格中 列出here
  • 如何在 Pyspark 中添加带有 min 和 max 函数的新列并按数据分组?

    PySpark 数据框 adobeDF 将新列添加到数据框 from pyspark sql window import Window from pyspark sql import functions as f adobeDF new a
  • DrRacket 中的宏步进器

    在链接上http www ccs neu edu home ryanc macro stepper tutorial html http www ccs neu edu home ryanc macro stepper tutorial h