2016-01-22 25 views
1

我嘗試編寫一個函數,它在第一個參數和第二個參數之間返回一個隨機數。套!球拍中模塊ERROR中的未綁定標識

(隨機之間40 80)

應該給40和80在此之間的隨機數是代碼:

(define (random-between x y) 
    ((set! result (random y)) 
     (if (> result x) 
      result 
      (random-between x y)))) 

當函數遞歸運行所述第二時間,我想,隨機函數創建一個新的結果誰再次測試,如果它高於x它輸出作爲最終結果。

這是我第一次用「set!」它給我這個錯誤:

集!:綁定標識符模塊:導致

其他類似的問題並沒有幫助我找到一個解決方案。

+1

'((set!result(random y))...)'是無意義的。爲什麼不使用'let'? – leppie

+0

我的鍵盤壞了,如果不使用心靈感應來改變RAM中的位,我就不能輸入「L」。或者,也許我們都開始某個地方。 –

+1

我不知道你在說什麼,但是一個雙括號通常是一個值得關注的地方,除非它評估爲一個程序。在你的情況下,'set!'永遠不會那樣做。 – leppie

回答

1

我會回答我自己的問題,因爲我希望別人回答它。不是晦澀的答案或書推薦。

是的,你需要使用具有這種語法:

(let ([id value]) body-which-is-evaluated-after) 

這是一個沒有遞歸速度效率的代碼。

(define (random-between x y) 
    (let ([result (- y x)]) 
     (+ (random result) x))) 
+0

我並沒有試圖變得sn。。但我試圖讓你考慮解決方案。我很高興你接受了我提供的提示並做到了:D +1 – leppie

+0

哦。對不起,我可能反應過度了。 –

+0

沒問題,我在學習Scheme時有類似的反應。這是40多歲的語言的問題:D – leppie