baitang36 发表于 2024-5-16 15:55:28

【原创】保留函数random&的参数

本帖最后由 baitang36 于 2024-5-16 15:58 编辑

跟踪发现,保留函数random&最少一个参数,最多两个参数,第二个参数是什么呢?继续跟踪,发现它要求的类型是vector,有三个元素的vector
问题是,怎么试验也无法做出一个符合要求的vector
发现random&的出错信息是错误: 参数类型错误: random-state-p: 1
看来它需要的是一个特殊的vector,这vector的类型是random-state-p
搜了一下和random-state有关的保留函数,发现一个make-random-state,它可以没有参数,也可以有一个参数。没有参数时返回一个固定vector,好像没意义。经过试验发现这个参数是T
总结一下,random&的用法是:(random& 整数 (make-random-state T))
random&make-random-state都是保留函数,用之前要用trf_9.fas的tranf转换一下。(load "trf_9.fas")(tranf "make-random-state")
试验一下:
命令: (random& 300 (make-random-state T))
261
命令: (random& 300 (make-random-state T))
18
命令: (random& 300 (make-random-state T))
231



baitang36 发表于 2024-5-16 16:23:39

(make-random-state T)每次生成的vector都是不同的,这样生成的随机数比一个参数更随机一些

smqzzz 发表于 2024-5-16 17:16:29

guosheyang 发表于 2024-5-16 20:14:30

感谢长老的分享!

crtrccrt 发表于 2024-5-17 09:42:53

本帖最后由 crtrccrt 于 2024-5-17 09:44 编辑

采用 (make-random-state T)参数后,试试连续调用返回值,我这里返回值均相同,不用该参数时返回随机值
(repeat 100(princ "\n")(princ (random& 100)) )(princ)
(repeat 100(princ "\n")(princ (random& 100 (make-random-state T))) )(princ)
(repeat 999(princ "\n")(princ (random& 100 (make-random-state T))) )(princ)

baitang36 发表于 2024-5-20 10:48:12

crtrccrt 发表于 2024-5-17 09:42
采用 (make-random-state T)参数后,试试连续调用返回值,我这里返回值均相同,不用该参数时返回随机值
(repe ...

看来(make-random-state T)这个函数是复位种子?等我有时间扒一下它。

伍星 发表于 2024-6-27 15:21:22

默默旁观大佬们都在研究什么
页: [1]
查看完整版本: 【原创】保留函数random&的参数