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 中的宏步进器 的相关文章

  • 如何编写 Clojure 宏来从字符串创建正则表达式?

    我正在创建一个方便的宏 部分便利在于可以仅使用字符串来指定正则表达式 而不是使用 re 表示法 我无法弄清楚的一部分是如何让宏获取字符串并将其重写为 Clojure 正则表达式 例如 生成 re 符号 我认为这是一个语法 转义问题 我的第一
  • 是否可以在 C 中自动生成的变量名中使用 __LINE__ ?

    为了避免重复 我想使用 LINE 在自动生成的变量名称中 define ROUTE path impl char k impl LINE route path impl 但它始终被视为普通字符串 LINE 即使我将其定义如下 我也无法得到我
  • 宏内调用函数和宏的区别?

    我的难题是以下示例 defmacro macro1 x println x defn func1 x println x defmacro macro2 x macro1 x func1 x defmacro macro3 x func1
  • Scheme (Lisp) 中树的深度反转

    我对Scheme中的基本树数据结构进行了深度逆向 define deep reverse t cond null t not pair t t else cons deep reverse cdr t deep reverse car t
  • XCode iPhone 项目中目标所有配置的通用预处理器宏

    我的应用程序的每个目标通常有四种配置 调试 发布 分发 临时 有没有办法为所有 4 个添加一个通用宏 同时不破坏我到目前为止设置的宏 您在编辑器中看到 多个值 提前致谢 奥比旺 在前缀头文件中定义宏 将包含在所有源文件中
  • 如何在mit-scheme中正确使用(读取)?

    我在文档和 Rosetta 代码中读到 read 用于从控制台获取输入 所以我写了这段代码来检查这一点 display read 1 但 mit scheme 从不要求用户输入 程序就会终止 为什么会这样呢 在 REPL 中 display
  • 内联函数与预处理器宏

    内联函数与预处理器宏有何不同 预处理器宏只是应用于代码的替换模式 它们几乎可以在代码中的任何地方使用 因为在任何编译开始之前它们都会被替换为扩展 内联函数是实际函数 其主体直接注入到其调用站点中 它们只能在适合函数调用的地方使用 现在 就在
  • 使用 Racket FFI 进行快速阵列访问

    我正在尝试在 Racket 中编写 OpenCV FFI 并达到了需要有效操作数组的地步 然而 我所有使用 Racket FFI 访问数组的尝试都会导致代码效率非常低 有没有办法使用 FFI 快速访问 C 数组 在 Racket 中 这种类
  • Julia 中基准和时间宏的区别

    我最近发现两个宏之间存在巨大差异 benchmark 和 time 在内存分配信息和时间方面 例如 benchmark quadgk x gt x 0 1 BenchmarkTools Trial memory estimate 560 b
  • PHP 内部:TSRMLS_FETCH 如何工作?

    PHP 内部结构是怎样的TSRMLS FETCH宏发挥作用吗 Per the PHP手册 http php net manual en internals2 memory tsrm php 在开发扩展时 包含 tsrm ls is unde
  • 标题的宏定义,放在哪里?

    定义头文件依赖的宏时 例如 FILE OFFSET BITS FUSE USE VERSION GNU SOURCE其中 放置它们的最佳位置在哪里 我考虑过的一些可能性包括 位于依赖于该文件中包含的标头公开的定义的任何源文件的顶部 紧接在相
  • C 相当于 C++ decltype

    在我的 C 项目中 有一个由另一位同事创建的结构体 其中包含一些函数指针 struct tools int tool a int int int 我无权更改此结构和相关文件 现在我正在使用该结构进行编码 我必须定义一个函数 其返回类型和参数
  • Racket 与Scheme 有何不同?

    Racket 是Scheme 的后代 Racket 与 R6RS 有何不同 它添加了什么 删除了什么 或者只是有所不同 我知道 Racket 不仅仅是一种语言 它还是一个语言平台 但我指的是主要的 Racket 方言 Racket 最终基于
  • 如何创建一个扩展为“(x+y*240)*2”这样的表达式的 GNU GAS 宏?

    我正在使用 GAS 为 ARM Linux 构建一个程序 但我想做一些宏以使我的开发更加智能 然后我想知道 我怎样才能为此做一个宏 x y 240 2 were x and y are int 将像这样使用 mov r0 MACRO SHO
  • 如何更改 DrRacket 中 R6RS 的打印行为以像 #langracket 一样打印结果

    当我在 IDE 版本 5 3 5 2013 06 18 f 中运行程序时 对于 lang racket eg lang racket 4 5 10 2 When pressing Run gt the interaction window
  • 对C宏扩展和整数运算感到困惑[重复]

    这个问题在这里已经有答案了 可能的重复 一个谜语 C https stackoverflow com questions 5611724 a riddle in c 我对以下代码片段有几个问题 include
  • 方案符号中区分大小写

    据我所知 Scheme 中的符号不 区分大小写 即 eq Hello hello 评估为 t 因为两者都用符号表示 hello 并且scheme具有两个同名符号是同一个对象的属性 然而 这对我来说似乎并非如此 而且事情似乎区分大小写 无论我
  • 计算二项式时“应用程序:不是过程”

    我正在定义一个函数binomial n k 又名帕斯卡三角形 但出现错误 application not a procedure expected a procedure that can be applied to arguments g
  • 内置方案以检查列表包含情况

    在Python中 我可以执行 x in list 来查看列表是否包含x 方案中是否有等效的内置功能可以做到这一点 The R5RS http schemers org Documents Standards R5RS HTML r5rs Z
  • 扩展文件的 Crc 错误

    上传和下载扩展文件成功Apk外部数据 Android扩展 https stackoverflow com questions 10327532 apk external data android expansion 但现在我面临着CRC解压

随机推荐

  • 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