返回随机数的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中的工作原理。我并不是说要排除速记版本。事实上,我同意这一点很重要。此外,除非用户希望每次运行应用程序时种子都是相同的,否则他需要先执行(随机源随机!默认随机源)
。