случайная функция в схеме - PullRequest
3 голосов
/ 14 ноября 2010

Я пытаюсь получить случайную строку из списка строк в схеме. Пример списка ("this" "that" "today" "вчера") Таким образом, на основе длины списка создается случайное число и выводится это слово. Но продолжайте получать ошибку!

Я попробовал это так:

;; produces random number that should be input to the random-function

(define (random-num list)

(random-function ((random (length (list))) list)))

;; loops the number of times till random number is 0 and outputs the list value

(define (random-function num list )
  (cond 
    [(zero? num) (car list)]
    [else (random-function (- num 1) (cdr list))]))

Ошибка:

procedure application: expected procedure, given: 
("this" "that" "today" "yesterday") (no arguments)

Когда я пытаюсь сделать:

(random-function (random (length list)) 

на консоли я получаю случайное число.

Не понимаю, почему здесь происходит сбой, когда это делается внутри моей программы ???

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

1 Ответ

10 голосов
/ 14 ноября 2010
(define (random-element list)
  (list-ref list (random (length list))))
...