如何在计划中生成随机?有没有特殊的形式,或者我需要创建一个程序?如果是这样,我该怎么做? (我试图创建一个称为随机选择的过程,输入两个策略并随机返回一个)计划 - 生成随机
回答
该过程被调用,令人惊讶的是,random
- 尽管确切的语法可能会不同,具体取决于Scheme解释器在使用(阅读文件!),但总体思路如下:
(random)
=> 0.9113789707345018
回访两个可能值之一,这将这样的伎俩在球拍:
注意,传递给random
的3210参数强制它随机返回两个可能值之一:0
或1
。因此,如果(random 2)
评估为0
,则返回a
,否则返回b
。
(random-choice 4 2)
=> 4
(random-choice 4 2)
=> 2
不是在标准的计划中,它不是。大多数实现都有创建随机数的功能,但它们并不全部使用相同的名称或相同的签名。例如,在Guile中有一个“随机”过程,但它至少需要一个参数并始终返回一个整数。所以你的代码会在Guile中导致一个错误(以及其他许多Scheme实现,我想)。如果没有标准答案,可以给出特定于实现的答案,但至少应该提及它是特定于实现的,以及它是特定的实现。 – sepp2k
@ sepp2k我澄清了这一点,谢谢 –
@ sepp2k如果按照“标准”包含“最终”SRFI(和我做的),[SRFI 27](http://srfi.schemers.org/srfi-27/srfi-27 .html)指定了一个获取随机数的接口。 –
标准方案不提供随机数发生器,尽管大多数Scheme实现提供了一个,但它们的细节往往不同。如果你想写一个便携式计划程序,很容易建立你自己的随机数发生器;这里有一个方法由于是Knuth:
(define random
(let ((a 69069) (c 1) (m (expt 2 32)) (seed 19380110))
(lambda new-seed
(if (pair? new-seed)
(set! seed (car new-seed))
(set! seed (modulo (+ (* seed a) c) m)))
(/ seed m))))
调用(random)
返回0之间(含)的随机级分和1(不包括)。随机分数周期为m。调用(random seed)
重置随机数发生器的种子,使得从相同种子开始的两个随机序列将是相同的;日期形式为YYYYMMDD制造良好种子(上面是Knuth的生日)。如果您想翻转硬币,请说:(if (< (random) 1/2) 'heads 'tails)
。
有时你想要一个范围内的随机整数。下面显示的randint
函数返回lo(含)至嗨(不包括)的范围内的随机整数; LO默认为0:
(define (randint . args)
(cond ((= (length args) 1)
(floor (* (random) (car args))))
((= (length args) 2)
(+ (car args) (floor (* (random) (- (cadr args) (car args))))))
(else (error 'randint "usage: (randint [lo] hi)"))))
随机数等,这些都是简单的模拟不够好,但要小心,他们不适合加密应用。如果你有兴趣,我有几个随机数发生器,包括一些适合加密应用的,在my blog。
由于您的其他问题是关于在DrRacket中实现太空船游戏,我将假设您通过Scheme指的是DrRacket中的一种教学语言。
在DrRacket中查找可用函数信息的方法很简单。在交互窗口中输入random
。将光标置于顶部,然后按F1。
在HTDP-语言random
的文档是在这里:
一种方法返回一个随机值:
(list-ref (list "one" "two") (random 2))
这里(随机2)将返回0或1 list-ref将返回索引为0或索引为1的条目 。
使用上述方法 的优点是,它很容易扩展到比两个更多的值 。
- 1. 生成随机数:计算随机生成的x次数
- 2. ABAP生成随机UUID/GUID
- 3. 随机数生成机制
- 4. 计数生成的随机数
- 5. 随机()不生成随机数
- 6. 随机数生成
- 7. 生成随机数
- 8. 生成随机图
- 9. 生成随机ROWID
- 10. 生成随机数
- 11. ArrayList随机生成
- 12. Haskell随机生成
- 13. 生成随机ASCII
- 14. 生成随机数
- 15. 生成随机词
- 16. 生成随机数
- 17. Javascript随机生成
- 18. 随机数生成
- 19. 生成随机生日
- 20. 从随机长生成随机数
- 21. 随机生成一个随机布尔
- 22. 通过随机字符生成生成随机名字太慢
- 23. 随机数生成器帮助不生成随机数 - C
- 24. 生成随机数onclick并计算生成的数字?
- 25. 生成几何随机数
- 26. 随机文本生成器
- 27. 随机样本生成器
- 28. 随机数生成公式?
- 29. Python中生成随机数
- 30. Jenkins的生成计划
这个坏男孩可能会帮助,即使它关闭。 [方案:创建随机范围[闭合]] [1] [1]:http://stackoverflow.com/questions/12334891/scheme-creating-a-random-range – TopGunCoder