流时间:球拍中的 arity mismatch 错误命中
Stream time: arity mismatch Error hits in Racket
我编写了这个程序,它使用宏 nota 和 ping,nota 允许我定义一个音符更容易,ping 只用一行代码(以 ping 开头的代码)压缩我在注释部分的三行中做的事情(通过扬声器)。
问题是这两个宏似乎不能一起工作,我得到了元数不匹配错误:
流时间:数量不匹配;
预期的参数数量与给定数量不匹配
预期: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)
ping
缺少 begin 来对 3 种形式进行分组:
(define-syntax-rule (ping y)
(begin
(signal-play y)
(sleep 0.25)
(stop)))
然后宏步进器显示您的代码已扩展为
(define E2 (network () [sunet <= sine-wave 82] [out = (+ sunet)]))
(define F#2 (network () [sunet <= sine-wave 92] [out = (+ sunet)]))
(define G2 (network () [sunet <= sine-wave 98] [out = (+ sunet)]))
(define A2 (network () [sunet <= sine-wave 110] [out = (+ sunet)]))
(begin (signal-play E2) (sleep 0.25) (stop))
(begin (signal-play F#2) (sleep 0.25) (stop))
(begin (signal-play E2) (sleep 0.25) (stop))
(begin (signal-play G2) (sleep 0.25) (stop))
(begin (signal-play E2) (sleep 0.25) (stop))
(begin (signal-play A2) (sleep 0.25) (stop))))
我编写了这个程序,它使用宏 nota 和 ping,nota 允许我定义一个音符更容易,ping 只用一行代码(以 ping 开头的代码)压缩我在注释部分的三行中做的事情(通过扬声器)。
问题是这两个宏似乎不能一起工作,我得到了元数不匹配错误:
流时间:数量不匹配; 预期的参数数量与给定数量不匹配 预期: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)
ping
缺少 begin 来对 3 种形式进行分组:
(define-syntax-rule (ping y)
(begin
(signal-play y)
(sleep 0.25)
(stop)))
然后宏步进器显示您的代码已扩展为
(define E2 (network () [sunet <= sine-wave 82] [out = (+ sunet)]))
(define F#2 (network () [sunet <= sine-wave 92] [out = (+ sunet)]))
(define G2 (network () [sunet <= sine-wave 98] [out = (+ sunet)]))
(define A2 (network () [sunet <= sine-wave 110] [out = (+ sunet)]))
(begin (signal-play E2) (sleep 0.25) (stop))
(begin (signal-play F#2) (sleep 0.25) (stop))
(begin (signal-play E2) (sleep 0.25) (stop))
(begin (signal-play G2) (sleep 0.25) (stop))
(begin (signal-play E2) (sleep 0.25) (stop))
(begin (signal-play A2) (sleep 0.25) (stop))))