0

[0, y) の範囲内のランダムな整数の長さ x のリストを生成する関数を定義しようとして、問題が発生しました。ランダムな整数のリストを生成するコードは次のとおりです。

(define (random-list range list-length)
  (cond
    [(zero? length) empty]
    [else (cons (random range) (random-list range (sub1 list-length)))]))

問題は、このコードを、再帰を使用して長さ (list-length) の 0 から (範囲 - 1) までの一意のランダムな整数のリストを生成するコードに変換しようとするとです。生成された乱数が作成中のリストに既にあるかどうかを確認する方法が見つからないようです。このコードは永久に実行されます:

(define (random-list range list-length)
  (cond
    [(zero? list-length) empty]
    [else
     (cond
       [(member? (random range) (random-list range list-length))
        (random-list range list-length)]
       [else
        (random-list range (sub1 list-length))])]))

何か案は?(DrRacket を使っています、初心者の学生)

4

1 に答える 1