You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Scheme的SRFI 27库随机整数函数设置种子?

SRFI 27 随机数种子设置与源切换方案

核心问题原因

SRFI 27的默认随机源是固定种子初始化的,所以每次程序启动都会生成相同的随机序列。要解决重复值问题,需要手动创建随机源、设置种子,再让随机整数函数关联这个新源。

具体步骤与代码示例

1. 创建并初始化随机源

用make-random-source创建新源后,有两种初始化方式:

;; 创建自定义随机源
(define my-random-source (make-random-source))

;; 方式一:基于系统随机熵自动生成种子(推荐,每次运行序列不同)
(random-source-randomize! my-random-source)

;; 方式二:手动指定种子(用于复现固定随机序列)
;; (random-source-pseudo-randomize! my-random-source 1234 5678)

2. 让随机整数函数使用新源

SRFI 27的random-integer默认用全局默认源,切换方式有两种:

  • 方式一:直接传源参数调用
;; 生成0到n-1之间的随机整数,使用自定义源
(random-integer n my-random-source)
  • 方式二:设为全局默认源,后续调用无需传参
;; 将自定义源设为全局默认
(random-source-set-default! my-random-source)

;; 之后直接调用即可生成随机数
(random-integer 100)

完整可运行示例

(import (srfi srfi-27))

(define my-random-source (make-random-source))
(random-source-randomize! my-random-source)
(random-source-set-default! my-random-source)

;; 测试:每次运行输出不同的0-99之间的整数
(display (random-integer 100))
(newline)

注意事项

  • 不同Scheme实现对SRFI 27的支持细节可能有差异,但核心函数make-random-source、random-source-randomize!、random-source-set-default!是标准定义,通用有效。
  • 如果需要调试或复现场景,用random-source-pseudo-randomize!固定种子值即可生成一致的随机序列。

内容的提问来源于stack exchange,提问作者Arhan Joshi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 00:22:06