Random elm生成随机数
我想在elm中的两个值之间生成一个随机整数。 大概是这样的:Random elm生成随机数,random,elm,Random,Elm,我想在elm中的两个值之间生成一个随机整数。 大概是这样的: (7,Seed { state = State 645041272 40692, next = <function>, split = <function>, range = <function> }) : ( Int, Random.Seed ) nb=random(0,10) 我读过文件和多篇文章。最好的答案就是从这个角度 但问题是它总是返回相同的值,甚至不是int,它是这样的: (7,See
(7,Seed { state = State 645041272 40692, next = <function>, split = <function>, range = <function> })
: ( Int, Random.Seed )
nb=random(0,10)
我读过文件和多篇文章。最好的答案就是从这个角度
但问题是它总是返回相同的值,甚至不是int,它是这样的:
(7,Seed { state = State 645041272 40692, next = <function>, split = <function>, range = <function> })
: ( Int, Random.Seed )
(7,种子{state=state 64504127240692,next=,split=,range=})
:(Int,Random.Seed)
因此,从现在开始,最好使用种子的当前时间。但是我怎么得到它呢?我必须用信号吗?有没有一个简单的方法来获取时间戳
我很困惑,我需要为种子生成一个随机整数,这样我就可以生成一个随机整数。如果不是,生成的随机整数就不是随机的。我想我误解了什么
编辑:我也找到了这个,但我不了解所有内容。更新为0.18
app =
Html.programWithFlags
{ init = init
, update = update
, view = view
, subscriptions = always Sub.none
}
init : {startTime : Float} -> Model
init {startTime} =
{ blankModel | randomSeed = Random.initialSeed <| round startTime }
app=
Html.programWithFlags
{init=init
,update=update
,视图=视图
,订阅=始终为Sub.none
}
初始化:{startTime:Float}->Model
init{startTime}=
{blankModel | randomSeed=Random.initialSeed
它总是返回相同的值
这就是纯随机数生成器的工作原理。你传入一个种子,然后又得到另一个种子
它甚至不是一个int,是这样的[疯狂的代码片段]
这是一对值。第一个是您正在查找的int。第二个是生成随机值的新种子。不要担心种子实际上是什么;它应该是不透明的。您可以使用fst
从该对中获取int,但如果您想要更多随机数,则需要新种子
所以从文档来看,最好使用种子的当前时间
这个文档错了,错了,错了。正如您所发现的,获取当前时间戳并不是一个简单的方法。如果您像Simon建议的那样从JS传递时间戳,只需使用Math.floor(Math.random()*0xFFFFFFFF)
。这将为您提供一个种子,它可以更好地在可能的输入空间上进行采样
这一点非常重要,因为随机数生成器将为相似的种子输出相似的值。例如,如果您使用小于53668的任何种子并生成一个布尔值,则该值将为True
。这是因为所用算法存在缺陷
更好的解决方案:-->可能重复的感谢,作为新手,这比其他方法更容易理解。
<script type="text/javascript">
var yourPgm = Elm.fullscreen(Elm.Main, {startTime: Date.now()});
</script>
startTimeSeed : Seed
startTimeSeed = Random.initialSeed <| round startTime
app =
StartApp.start
{ init = (init 8 8 startTimeSeed, Effects.none)
, update = update
, view = view
, inputs = []
}
port startTime : Float
<script type="text/javascript">
var yourPgm = Elm.fullscreen(Elm.Main, {startTime: Date.now()});
</script>