返回随机数的Scheme函数

返回随机数的Scheme函数,scheme,Scheme,我试图在函数中使用srfi-27中的random integer,但每次调用它时,它总是返回相同的数字 (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) 输出:

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

(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之间的数字,但实际上我想对返回的数字做额外的操作,我不想复制粘贴此代码。

get-n
不是一个函数,它只是一个变量,当您分配它时,它包含对
随机整数
的单个调用的结果。如果希望每次都得到一个新的随机数,就必须定义一个函数,并将其作为函数调用

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

(print (get-n))
(print (get-n))
(print (get-n))
上述函数定义语法可以缩写为:

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

你的答案是正确的,但是考虑到OP试图做的事情,可能最好使用速记,
(define(get-n)(random integer 10))
。对于学生来说,我认为
lambda
符号更好地帮助他们理解Scheme中的工作原理。我并不是说要排除速记版本。事实上,我同意这一点很重要。此外,除非用户希望每次运行应用程序时种子都是相同的,否则他需要先执行
(随机源随机!默认随机源)