2016-01-20 19 views
0

打我寫了這個程序,它採用了宏諾塔諾塔讓我來定義一個音符更容易和中只有一行壓縮代碼(以ping開頭的代碼)在註釋部分中的三行代碼(通過揚聲器發送)。流時間:元數的失配誤差在球拍

的問題是,這兩個宏似乎不在一起工作,我得到的元數不匹配錯誤:

流時間:元數不匹配; 參數的預期數量不匹配給定數量 預期:0 給出:2個 參數: # #

我試着定義和定義的語法和它不工作。

#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) 

回答

3

ping缺少3所形成begin到組:

(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)))) 
+0

謝謝!有用。 –