0

私はRacketを使用しています。私がやりたいのは、指定された長さを持つ指定された要素のランダムなリストを作成することです。リストの作成方法は知っていますが、リストを再作成せずにコマンドラインからリストを使用して関数を呼び出すたびに、同じリストを保持する方法がわからないという問題があります。リストはランダムに選択された要素で構成されているためです。これは私が持っているものです:

(define gameColors '(red green blue yellow black))
(define currentGameList '())
(define input 4)
(define randomNumber (random 5))

(if (equal? randomNumber 0)
  (if (< (length currentGameList) (+ input 1))
      (set! currentGameList (append currentGameList (list (car gameColors))))
      ;;otherwise
      (set! currentGameList currentGameList))
  ;;otherwise
  (set! currentGameList currentGameList))

そして、if ブロックは、randomNumber のさまざまな可能な結果ごとに繰り返されます。私が知る必要があるのは、プログラムで毎回 currentGameList を再作成することなく、currentGameList を使用するコマンド ラインから推測関数を繰り返し呼び出す方法だけです。推測機能には、ユーザーが入力する必要があるパラメーターもあるため、毎回コマンド ラインで入力する必要があります。どんな助けでも大歓迎です。

4

1 に答える 1

1

最初に: の使用は避けてset!ください。別の種類のプログラミング言語では、問題を解決するために変数の突然変異を使用しますが、Scheme ではそうはいきません。問題のコードは機能しません。カラーリストを反復または繰り返しているものはなくgameColors、毎回の最初の要素のみが選択されています(ランダムなことは何もありません)。私が質問を理解していれば(少し紛らわしいです)、これがあなたが目指していたものです:

(define (generate-random lst len)
  (for/list ([x (in-range len)])
    (list-ref lst (random (length lst)))))

(generate-random '(red green blue yellow black) 4)
=> '(black black blue green) ; one possible output

もちろん、 の 1 回の呼び出しで生成された特定のリストを保存する必要がある場合generate-random(結果が毎回異なるため)、後で使用するためにリストを変数に保存するだけです。

(define currentGameList (generate-random '(red green blue yellow black) 4))
于 2013-03-22T04:22:10.547 に答える