Random 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

我想在elm中的两个值之间生成一个随机整数。 大概是这样的:

(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>