2016-11-08 106 views
0

我想寫一個函數,它需要一個列表的長度和一個最大數值,並返回一個列表,該列表是給定的長度爲1和給定的最大值的隨機數。建立一個隨機列表

到目前爲止,我

(define (randomlist n max) 
(cond 
    [(= n 0)empty] 
    [else 
     (cons (build-list n (random 1 max)) 
      (randomlist max (- n 1)))])) 

當我運行這一點,並想知道是否有人能幫助我,我得到一個錯誤。

+0

這將有助於知道你得到了什麼錯誤。 –

+0

爲什麼要切換'n'和'max'的順序? – Sylwester

回答

1

有在你的代碼的幾個錯誤:

  • 這是一個壞主意,調用參數max,與內置的程序衝突。所以我將它重命名爲mx
  • 絕對沒有理由使用build-list,這不是我們如何建立一個輸出列表,只是cons其餘的一個元素。
  • random接收零個或一個參數,而不是兩個。單參數版本返回範圍爲0..n-1的整數,因此我們必須將1添加到範圍爲1..n的結果中。
  • 您在遞歸調用randomlist時切換參數的順序。

這應該照顧的問題:

(define (randomlist n mx) 
    (cond 
    [(= n 0) empty] 
    [else 
    (cons (+ 1 (random mx)) 
      (randomlist (- n 1) mx))])) 

它按預期工作:

(randomlist 5 10) 
=> '(10 7 1 4 8) ; results will vary, obviously 
+0

@JohnC如果這個或其他答案解決了你的問題,不要忘記[接受](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)它; )很簡單,只需點擊左邊的複選標記即可。 –

1

你也可以使用for/list結合循環和列表的生成:

(define (randomlist n mx) 
    (for/list ((i n)) 
    (add1 (random mx)))) 

測試:

(randomlist 5 10) 

輸出:

'(5 9 10 4 7) 

(隨機數,因此,輸出很可能每次是不同的)。