2009-09-16 2 views
0

Согласно схеме Я хочу, чтобы сгенерировать вектор случайных чисел, я попытался это так:генерации случайных чисел внутри вектора

(make-vector 10 (random 100)) 

и выход для этого такова:

#(44 44 44 44 44 44 44 44 44 44) 

поэтому кажется, что он использует одно и то же семя для сгенерированных элементов, как я могу решить эту проблему при генерации n количества случайно сгенерированной последовательности чисел.

Приветствия

ответ

2

Если вы используете PLT Scheme вы можете использовать встроенный вектор:

(build-vector 100 (lambda (_) (random 100))) 

Если вы используете одну из стандартных версий (R5RS, R6RS и т.д.) вы можете определить построить векторную графику самостоятельно, например, как это:

(define (build-vector n f) 
    (let ((v (make-vector n))) 
    (do ((i 0 (+ i 1))) ((> i 9) v) 
     (vector-set! v i (f i))))) 
+0

спасибо большое, могу ли я задать вам значение «лямбда (_)»? спасибо – Hellnar

+0

Я просто положил символ подчеркивания как имя переменной, так как я никогда не использовал его в теле функции. – Jonas

1

Вы должны вызвать random 100 один раз для каждого элемента вектора.

+0

так делают вектор довольно бесполезно для меня, насколько я вижу. – Hellnar

+1

@Hellnar: нет, вам все равно нужен make-vector, чтобы сделать вектор в первую очередь, а затем вы задаете каждый элемент – newacct

1

Другой способ сделать это:

(define (random-vector count seed) 
    (let loop ((vec '(vector)) (i count)) 
     (cond ((> i 0) 
      (loop (cons (random seed) vec) (sub1 i))) 
     (else (eval (reverse vec)))))) 

не может быть лучшим решением, но показывает как написать и оценить a Схема программы во время выполнения. Может быть, полезно для новых Schemers.

Некоторые примеры использования:

> (random-vector 10 100) 
#10(53 57 47 34 88 32 70 66 92 56) 

> (random-vector 100 500) 
#100(42 1 250 396 63 120 185 397 251 88 497 271 246 327 91 108 240 306 445 180 292 55 497 67 445 300 279 229 342 122 498 10 253 248 44 133 450 55 112 13 309 255 101 456 272 7 239 113 394 453 89 343 386 471 92 44 61 239 382 313 78 22 376 466 24 97 286 343 237 220 458 153 131 217 390 94 53 461 237 22 327 196 460 436 311 418 41 124 79 24 37 388 344 176 314 432 26 341 303 218) 
Смежные вопросы