struct 是 Racket 中的宏吗?

2023-12-12

我记得我在某处读到它不是宏,而是内置于核心语言中的。类似的事情,我不确定,因为我已经记不起我是从哪里读到的了。也是如此structRacket 中是否有宏?如果不是,为什么它被内置到核心语言中?


一个宏;struct.rkthas

(define-syntax (struct stx)
    (define (config-has-name? config)
      (cond
       [(syntax? config) (config-has-name? (syntax-e config))]
       [(pair? config) (or (eq? (syntax-e (car config)) '#:constructor-name)
                           (eq? (syntax-e (car config)) '#:extra-constructor-name)
                           (config-has-name? (cdr config)))]
       [else #f]))
    (with-syntax ([orig stx])
      (syntax-case stx ()
        [(_ id super-id fields . config)
         (and (identifier? #'id)
              (identifier? #'super-id))
         (if (not (config-has-name? #'config))
             (syntax/loc stx
               (define-struct/derived orig (id super-id) fields  #:constructor-name id . config))
             (syntax/loc stx
               (define-struct/derived orig (id super-id) fields . config)))]
        [(_ id fields . config)
         (identifier? #'id)
         (if (not (config-has-name? #'config))
             (syntax/loc stx
               (define-struct/derived orig id fields  #:constructor-name id . config))
             (syntax/loc stx
               (define-struct/derived orig id fields . config)))]
        [(_ id . rest)
         (identifier? #'id)
         (syntax/loc stx
           (define-struct/derived orig id . rest))]
        [(_ thing . _)
         (raise-syntax-error #f
                             "expected an identifier for the structure type name"
                             stx
                             #'thing)]))))

在 Racket IDE 中,您可以使用Open Defining File函数来查找源代码(如果有)。

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

struct 是 Racket 中的宏吗? 的相关文章

  • 如何从 2 个列表创建关联列表?

    在 DrScheme 中 如何从 2 个列表创建关联列表 例如 我有 y 1 2 3 x a b c 而且我要 z a 1 b 2 c 3 假设方案 因为你的最后两个问题是关于方案 define x 1 2 3 define y 4 5 6
  • 从 procedure 形式转换为 let 形式

    我在scheme中编写了这个程序形式的代码 我需要将其更改为let形式 这是程序表单代码 define PI 3 14159265 define areac lambda d PI d 2 d 2 define volumec lambda
  • 调用宏中的其他函数

    如何在宏中调用其他函数 宏 以下似乎不起作用 即使我定义bar with define syntax define bar hello define syntax foo stx syntax case stx a b bar Racket
  • 如何查找“不是过程”错误

    define comp f g lambda x f g x define complement f cond equal comp f lambda g g t f equal comp f lambda g g f t compleme
  • 从 DrRacket 读取命令行参数

    当使用球拍运行脚本时 如何检测给出的命令行参数 也就是说 相当于 Python 中的 sys argv Java 中的 args 等 您有以下选择 您可以在文档中查找所有选项以获取更多信息 current command line argu
  • Racket 中列表到字符串的转换

    如何在 DrRacket 中将列表转换为字符串 例如 如何将 红黄蓝绿 转换为 红黄蓝绿 我尝试使用 list gt string 但这似乎只适用于字符 这里的技巧是映射列表symbols作为输入接收 依次将每个数字转换为字符串 并在除最后
  • 方案/球拍过滤器/映射多个参数

    可以说我想做以下事情 define foo lst x filter function lst but function接受 2 个参数 并且function给了我 其中之一是清单lst它将使用 另一个是x 从语法上讲 我将如何更改该行以传
  • Tonumber 函数 (tonumber ‘(一二三) --> 123

    解决后如何拼写球拍中的数字 咒语编号 https stackoverflow com questions 22696615 how to spell a number in racket spellnum 22700116 noredire
  • 如何清除 Dr. Racket IDE 中的解释器屏幕?

    刚刚开始接触 The Little Schemer 有一个非常基本的 Dr Racket IDE 问题 如何清除口译员屏幕 如何设置向上箭头来显示之前输入的项目 如 Bash 中 而不是当前向上滚动屏幕的行为 我的搜索结果一片空白 可能是因
  • 这些嵌套向量是如何连接的?

    我编写了一段代码 它创建了一个向量 记分板 其中包含 3 个大小为 3 的独立向量 所有向量都包含符号 在所有索引 0 2 处 当我现在执行 向量集 时在记分牌的第一个向量上 要将其第一个元素更改为 X 向量 2 和 3 也会更改 这是如何
  • 球拍累加器列表功能

    我正在研究创建您可能玩过的 2048 游戏的具体步骤 它位于许多在线网站上 基本上这个函数所做的就是 1 所有空格移到后面 2 如果前两个数字相等 则加倍并检查每两个数字 这些是我所坚持的步骤的说明 设计一个向左滑动的函数 使其运行sing
  • eq 之间的区别?和 = 在方案中?

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

    Racket 中是否有内置的方法来获取 POST GET 参数 extract binding和朋友做我想做的事 但附加了一个关于与文件上传相关的潜在安全风险的可怕注释 其结论是 因此 我们建议反对他们 使用 但它们是为 与旧代码的兼容性
  • 在Scheme中编写一个自动记忆器。有关宏和包装器的帮助

    我在Scheme中编写自动记忆器时遇到了一些问题 我有一个有效的 memoize 函数 它创建一个哈希表并检查该值是否已经计算出来 如果之前已经计算过 则返回值 否则调用该函数 define memoizer fun let a table
  • 将自然数转换为特定基数并将其作为列表返回

    我想将函数的结果显示为列表而不是数字 我的结果是 define lst list define num gt base n b if zero n append lst list 0 append lst list 10 num gt ba
  • Scheme 和 Racket 中嵌套引号的行为

    在 Racket 中编写函数时 我不小心在符号前面放了两个单引号而不是一个 即我不小心写了 a 并发现嵌套引号的一些行为看起来很奇怪 我正在使用 DrRacket 并使用 Racket lang 和 R5RS lang 对此进行了测试 wr
  • 使用map或reduce或filter,在Scheme中,计算列表中有多少个元素[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 number length 1 1 0 1 0 0 这假设返回 6 我知道如何使用长度并找到它 但我不知道如何在没有长度的情况下使用映射或过
  • Lisp 中的 (定义 (平均 ....))

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

    我想做的就是使用 when 语句返回一个值 我想要以下功能 if x return y 我正在尝试使用 when x y 但是when语句并没有以退出函数并返回y的方式进行计算 它只是愉快地继续下一行 有没有办法做到这一点而不需要制作一个看
  • 球拍博士中的位图[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如何在 drracket 中的框架 gui 上加载位图 请给出必要的代码和参考文献 我承认 我很难在文档中找到正确的位置来指向您 这是

随机推荐

  • 如何优化这个复杂的EAV MYSQL查询?

    是否可以优化我写的这个查询 我创建了一种动态虚拟数据库 使我的用户能够添加自定义字段而不影响数据库结构 这是迄今为止结构的非常简化的视图 tables columns db cases caseid db structure fieldna
  • R POSIXct 返回 NA 为“03/12/2017 02:17:13”

    我有一个包含以下日期以及其他几个日期的数据集 03 12 2017 02 17 13 我想将整个数据集放入数据表中 所以我使用read csv and as data table创建DT 其中包含date中的日期 时间信息 接下来我用了 D
  • 使用 SSE 将向量乘以常数

    我有一些在 4D 向量上运行的代码 目前我正在尝试将其转换为使用 SSE 我在 64b linux 上同时使用 clang 和 gcc 仅对向量进行操作就可以很好地理解这一点 但现在我必须将整个向量乘以一个常数 像这样 float y 4
  • 如何将 .xls 文件转换为 .csv 文件?

    如何转换 xls to csv在 Perl 中 这个模块是什么 有这方面的例子吗 最好的转换方式是什么 use Spreadsheet ParseExcel my xlsparser Spreadsheet ParseExcel gt ne
  • 使用 jQuery 切换同级元素

    我想切换列表中链接的下一个同级链接 如下所示 ul li a href 1 a li li a href 2 a ul class selected li a href 2 1 a li li a href 2 2 a li li a hr
  • 使用 BULK INSERT 命令将 CSV 文件导入 SQL Server 表

    我有 CSV 文件 其中有几个数据列 CSV 文件看起来像 字段1 测试1字段2 测试2字段3 测试3 测试4 测试5 在这种情况下 我可以使用哪个库作为字段终止符 我的意思是如果我使用此查询将 CSV 文件插入到shopifyitem表
  • 如何覆盖 CSS 类的属性以避免复制和重命名样式

    我对 CSS3 相当陌生 我希望能够执行以下操作 当我将一个类添加到元素中时 它会覆盖该特定元素中使用的另一个类的属性 假设我有 a class left carousel control href carousel 我希望能够添加一个名为
  • UIImageView动画消耗内存太多

    我的记忆和动画图像有问题 首先 我正在使用 ARC 在我的初始屏幕上 我有大约 60 个要制作动画的图像 我正在使用此代码进行动画 NSMutableArray images NSMutableArray alloc init int an
  • 常量文件中的 codeigniter base_url

    目前我通过以下方式显示图像 img src USER UPLOAD URL 在 application config constants php 中定义 define USER UPLOAD URL uploads user uploads
  • 使用 XSLT 将输入 XML 转换为其他 XML

    我是初学者 想学习 XSLT 我遇到了使用 XSLT 将输入 XML 文件转换为另一个 XML 文件的问题 我的输入 XML 文件
  • 为什么React-router在url改变时不重新渲染页面也不更新数据?

    我正在 React 中构建一个项目 该项目通过自定义挂钩从 API 检索数据 一旦检索到数据 它就会显示卡片 通过单击它们可以打开描述性页面 到这里一切都好 App js
  • 如何从 WebMatrix 2 Beta 中的 vsdoc 文件引用获取 JavaScript Intellisense?

    我将 JavaScript 文件从 Visual Studio 复制到新的 WebMatrix 2 Beta 项目 结果发现 vsdoc 文件没有用于 JavaScript Intellisense
  • Android背景隐藏子视图文本

    我有一个简单的 LinearLayout 当我添加安卓 背景对于 LinearLayout TextView不再可见 我不明白什么
  • PHP CSV 字符串到数组

    我正在尝试将 CSV 字符串解析为 PHP 中的数组 CSV 字符串具有以下属性 Delimiter Enclosure New line r n 示例内容 12345 Computers Acer 4 Varta 5 93 1 0 04
  • Oracle WITH 和 MATERIALIZE 提示充当函数的自主事务

    在 Oracle 12c 中 如果我在查询中调用在 WITH AS 部分中使用 MATERIALIZE 提示的函数 则该函数调用的行为类似于自治事务 DROP TABLE my table CREATE TABLE my table my
  • 使用 WPF 自定义控件库 (.NET Framework) 中普通 WPF 项目中的 App.xaml

    我有一个 WPF 项目App xaml 不是资源字典 带有一些材料设计的东西和一个 ViewModelLocator MVVM 如下所示
  • 如何在 JGit 中编写 git log --stat 命令

    我有以下 git 命令 git log stat 1000 all gt gitstat log 在 JGit 中可以实现这一点吗 如果是 在 JGit 中编写此代码的等效方法是什么 为了访问存储库的历史记录 JGit 提供了RevWalk
  • 使用 Python 每 64 个字符插入一个换行符

    使用 Python 我需要每 64 个字符向字符串中插入一个换行符 在 Perl 中这很简单 s 64 1 n 如何使用 Python 中的正则表达式来完成此操作 有没有更Pythonic的方法来做到这一点 与 Perl 中相同 但使用反斜
  • 调度 Redux 操作是否被视为昂贵?

    我已经使用 React Redux Typescript 堆栈有一段时间了 到目前为止我很喜欢它 然而 由于我对 Redux 还很陌生 所以我一直想知道这个特定的话题 调度 Redux 操作 和 thunk 是否被认为是昂贵的操作并且应该谨
  • struct 是 Racket 中的宏吗?

    我记得我在某处读到它不是宏 而是内置于核心语言中的 类似的事情 我不确定 因为我已经记不起我是从哪里读到的了 也是如此structRacket 中是否有宏 如果不是 为什么它被内置到核心语言中 一个宏 struct rkthas defin