2017-02-13 9 views
5

1から5までの数字を含むリストがあるとします。エルムの関数shuffleListを引数として整数のリストを取り、リストの無作為バージョンを返すように書く方法を教えてください。それはOKですエルムのリストをシャッフルするには?

shuffleList [1,2,3,4,5] 
{-5,1,2,4,3-} 

例えば、あなたはおそらく、ELM-コミュニティ/ランダム余分からshuffle機能が欲しいランダムシード

+0

http://package.elm-lang.org/pa ckages/mgold/Elm-Random-Sampling/2.0.3/Random-Array –

+0

このライブラリのコード例は機能しません –

+0

http://tylerscode.com/2016/06/list-shuffle-elm/ – wintvelt

答えて

7

をハードコーディングします。あなたがが手でこれを実行する場合は、次の操作を行うことができます初期Seed与え、Ellie

にその使用例は

import List.Extra exposing (getAt, removeAt) 
import Random exposing (Seed, int, step) 

shuffleList : Seed -> List a -> List a 
shuffleList seed list = 
    shuffleListHelper seed list [] 


shuffleListHelper : Seed -> List a -> List a -> List a 
shuffleListHelper seed source result = 
    if List.isEmpty source then 
     result 
    else 
     let 
      indexGenerator = 
       int 0 ((List.length source) - 1) 

      (index, nextSeed) = 
       step indexGenerator seed 

      valAtIndex = 
       getAt index source 

      sourceWithoutIndex = 
       removeAt index source 
     in 
      case valAtIndex of 
       Just val -> 
        shuffleListHelper nextSeed sourceWithoutIndex (val :: result) 

       Nothing -> 
        Debug.crash "generated an index outside list" 

例(これはelm-community/list-extraパッケージから一部の機能を使用しています) Ellie

関連する問題