Scheme函数返回随机数

时间:2014-08-16 12:12:15

标签: scheme

我正在尝试在函数内使用random-integer srfi-27,但每次调用它时它总是返回相同的数字。

(use srfi-27)

(define get-n
  (random-integer 10))

(print get-n)
(print get-n)
(print (random-integer 10))
(print (random-integer 10))
(print (random-integer 10))
(print get-n)
(print get-n)

输出:

8
8
1
9
8
8
8

有人可以向我解释为什么这个函数总是给我回复相同的数字。

此外,我如何抽象编写随机数的代码?

在示例中,我只询问0到10之间的数字,但实际上我想对返回的数字做额外的事情,我不想复制粘贴此代码。

1 个答案:

答案 0 :(得分:2)

get-n不是一个函数,它只是一个变量,它包含分配给random-integer时单个调用的结果。如果您希望每次都获得一个新的随机数,则必须定义一个函数,并将其称为函数。

(define get-n
    (lambda() (random-integer 10)))

(print (get-n))
(print (get-n))
(print (get-n))

上述函数定义语法可以缩写为:

(define (get-n)
    (random-integer 10))