【发布时间】:2016-01-20 20:53:52
【问题描述】:
我编写了这个程序,它使用宏 nota 和 ping,nota 让我可以更轻松地定义注释和 ping 只压缩一行代码(以 ping 开头的代码)我将在评论部分的三行中执行的操作(通过扬声器发送)。
问题是这两个宏似乎不能一起工作,我得到了 arity mismatch 错误:
流时间:arity 不匹配; 预期的参数数量与给定的数量不匹配 预期:0 给定:2 论据。: # #
我尝试使用define 和define-syntax,但它不起作用。
#lang racket
(provide (all-defined-out))
(require rsound)
(define-syntax-rule (nota x y)
(define x
(network ()
[sunet <= sine-wave y]
[out = (+ sunet)])))
(define-syntax-rule (ping y)
(
(signal-play y)
(sleep 0.25)
(stop)))
(nota E2 82)
(nota F#2 92)
(nota G2 98)
(nota A2 110)
(ping E2)
(ping F#2)
(ping E2)
(ping G2)
(ping E2)
(ping A2)
;(signal-play E2)
;(sleep 0.25)
;(stop)
;(signal-play F#2)
;(sleep 0.25)
;(stop)
;(signal-play G2)
;(sleep 0.25)
;(stop)
;(signal-play A2)
;(sleep 0.25)
;(stop)
【问题讨论】:
标签: macros lisp racket type-mismatch