2016-05-20 6 views
1

Random.Generator (Float, Float)を作成しようとしています。最初のFloatがある範囲にあるとします。0.01000.00.0と最初の値の間です。有効な値のElmで浮動小数点数列をランダムに生成する方法はありますか?

例:(12.0, 5.0) 無効:(303.0, 800.0)

私はRandom.Extraモジュール内のコードの上に見えたが、私の周り私の方法を見つけることができませんでした。

この例はコンパイルされていません。 :)ここで

tuple = 
    let range = float 0.0 500.0 
    in flatMap (\max -> (max, float 0.0 max)) range 

答えて

4

は、発電機のコードです:

floatTuple : Random.Generator (Float, Float) 
floatTuple = 
    Random.float 0.0 1000.0 
    `Random.andThen` 
    (\val1 -> Random.map ((,) val1) (Random.float 0 val1)) 

そして、ここでは、あなたが(0.17で)それを使用することができる方法です。

(tuple, nextSeed) = Random.step floatTuple initialSeed 
4

あなたはRandom.andThen

を使用する必要があります

ここに完全な実例があります(&はhttp://elm-lang.org/tryに貼り付けてください)

import Html exposing (..) 
import Html.App as App 

import Random exposing (Generator, generate, float, map, andThen) 
import Time exposing (every, second) 

myPair : Float -> Float -> Generator (Float, Float) 
myPair min max = 
    let 
    range = float min max 
    in 
    range 
    `andThen` (\f -> map ((,) f) (float min f)) 


type Msg = Request | Update (Float, Float) 

update msg model = 
    case msg of 
    Request -> model ! [generate Update (myPair 0 1000)] 
    Update pair -> pair ! [] 


view model = text (toString model) 


main = 
    App.program 
    { init = (0,0) ! [] 
    , update = update 
    , view = view 
    , subscriptions = (\_ -> every (2*second) (always Request)) 
    } 
+0

ありがとうございました! – Adrian

関連する問題