2017-02-25 49 views
0
未綁定變量

我已經在計劃下面的代碼錯誤:在方案

(define (serie A B) 
    (if (> A B) 
     (
      (define AB (* A B)) 
      (write AB) 
     ) 
     (
      (write "No") 
     ) 
    ) 
) 

當我調用此函數,出現以下錯誤: prog.scm:5:53:未綁定變量

爲什麼這是否發生?

+0

報告的具體錯誤是由錯誤的'define'引起的。詳情請參閱我的回答。 –

回答

1

在Scheme中,括號不是而是,用於分隔代碼塊,與其他編程語言中的大括號不同。並且你不能在另一個表達式中使用define變量(只能在過程開始時才能完成);改爲使用let。構建和縮進代碼正確的方法是:

(define (serie A B) 
    (if (> A B) 
     (let ((AB (* A B))) 
     (write AB)) 
     (write "No"))) 

當然,你並不真的需要一個局部變量,你應該直接寫相乘的結果:

(define (serie A B) 
    (if (> A B) 
     (write (* A B)) 
     (write "No"))) 

無論是方式,它按預期工作:

(serie 10 20) 
=> "No" 
(serie 100 20) 
=> 2000 
+0

謝謝,你幫了我很多,我必須理解'define'的表達方式,因爲它讓我感到困惑。我在哪裏可以找到有關此編程語言和函數式編程的一般信息? – Lemark

+0

@Lemark我推薦「如何設計程序」或「The Little Schemer」 –

+0

@Lemark「如何設計程序」可在[here](http://www.htdp.org)上找到。 – molbdnilo