首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >别名宏的子句的名称

别名宏的子句的名称
EN

Stack Overflow用户
提问于 2016-03-13 22:12:44
回答 1查看 419关注 0票数 5

我想别名一些racket 2htdp函数/宏,这样我就可以为我的孩子用另一种语言来翻译它们了。

这些都是函数,我可以简单地用define别名。big-bang结构有问题;例如,如果我尝试使用别名on-tick,那么每次得到big-bang: [new-name] clauses are not allowed within big-bang时都会遇到麻烦。

我尝试了define-syntax的各种变体,但到目前为止,我无法使它工作(也就是说,我是一个完全的球拍新手)。

类似的东西可以工作(嗯,ladja没有定义):

代码语言:javascript
复制
#lang racket
(require 2htdp/universe 2htdp/image)

(big-bang 0
            (on-tick (lambda (x) (+ x 1)))
            (to-draw (lambda (x) (place-image ladja 150 x (prazni-prostor 300 300))))
            (stop-when (lambda (x) (= x 300))))

但这不是(触发错误):

代码语言:javascript
复制
#lang racket
(require 2htdp/universe 2htdp/image)

(define new-name on-tick)

(big-bang 0
            (new-name (lambda (x) (+ x 1)))
            (to-draw (lambda (x) (place-image ladja 150 x (prazni-prostor 300 300))))
            (stop-when (lambda (x) (= x 300))))

我看到了big-bang is a macro,所以这就解释了这个问题:我想我必须能够首先对宏进行评估,以某种方式?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-14 00:12:20

如果要在程序中编写所需的模块,则可以使用providerename-out提供别名:

在“大爆炸加新名字”中:

代码语言:javascript
复制
#lang racket
(require 2htdp/universe 2htdp/image)

(provide big-bang
         to-draw
         stop-when
         empty-scene
         (rename-out [on-tick new-name]))

在另一个文件中使用它:

代码语言:javascript
复制
#lang racket

(require "big-bang-with-new-name.rkt")

(big-bang 0
          [new-name (lambda (x) (+ x 1))]
          [to-draw (lambda (x) (empty-scene 200 200))]
          [stop-when (lambda (x) (= x 300))])

许多宏使用free-identifier=?来识别这样的关键字。Rename transformersfree-identifier=?合作创建精确的别名。这意味着您还可以在主文件中将new-name定义为重命名转换器,如下所示:

代码语言:javascript
复制
#lang racket
(require 2htdp/universe 2htdp/image)

(define-syntax new-name (make-rename-transformer #'on-tick))

(big-bang 0
          [new-name (lambda (x) (+ x 1))]
          [to-draw (lambda (x) (empty-scene 200 200))]
          [stop-when (lambda (x) (= x 300))])
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35976538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档