Scheme 格式中的随机函数

Scheme 格式中的随机函数,scheme,racket,Scheme,Racket,我试图从scheme中的字符串列表中获取一个随机字符串。 示例列表(“这个”“那个”“今天”“昨天”) 所以,根据列表的长度,创建一个随机数,并输出该单词。但是不断地出错 我这样试过: ;; produces random number that should be input to the random-function (define (random-num list) (random-function ((random (length (list))) list))) ;; loop

我试图从scheme中的字符串列表中获取一个随机字符串。 示例列表(“这个”“那个”“今天”“昨天”) 所以,根据列表的长度,创建一个随机数,并输出该单词。但是不断地出错

我这样试过:

;; 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中,我会使用数组并直接给出位置。
无论如何也要在scheme中这样做吗?

u太棒了!!列表参考太棒了!!现在似乎比数组好:)好吧,如果你有很大的列表,向量仍然更好,否则差异可以忽略不计。向量更好,因为你可以立即跳转到元素
n
,而列表你必须从头开始,找到到元素
n
。是的,向量是随机访问的——但人们往往高估了差异,过早地得到向量和不方便的代码。此外,还有一种野兽,如随机访问列表,。
(define (random-element list)
  (list-ref list (random (length list))))