首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于展开代码的Racket宏

用于展开代码的Racket宏
EN

Stack Overflow用户
提问于 2016-01-20 17:19:45
回答 2查看 70关注 0票数 4

我想写:

代码语言:javascript
复制
(nota E2 82)

而不是:

代码语言:javascript
复制
(define E2
  (network ()
           [sunet <= sine-wave 82]
           [out = (+ sunet)]))

我知道我可以使用宏来完成这个任务,并尝试编写如下内容:

代码语言:javascript
复制
(define-syntax (nota stx)
  (syntax-case stx ()
    [(nota x) #'(network ()
                         [sunet <= sine-wave x]
                         [out = (+ sunet)])]))

但我知道这个错误:

代码语言:javascript
复制
nota: bad syntax in: (nota E2 82)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-20 18:18:06

最简单的解决办法是

代码语言:javascript
复制
(define-syntax-rule (nota x y)
  (define x
    (network ()
             [sunet <= sine-wave y]
             [out = (+ sunet)])))
票数 5
EN

Stack Overflow用户

发布于 2016-01-20 21:01:42

好吧,那太糟糕了。您真的不需要编写这个宏;应该有一个为网络提供固定输入的表单。

事实上,的确有。但是..。它没有被记录下来,也没有很好的命名。它目前名为fixed-inputs,但我将把它重命名为network-const,并将其文档化。

谢谢你提醒我做这件事!

约翰

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34906442

复制
相关文章

相似问题

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