2016-08-07 4 views
1

я whant генерировать случайную перестановку элементов списка, Пример:Сформировать случайную перестановку элементов списка OCaml

listString = ["a"; "b"; "c"; "d"; "e"; "f"] 

я whant что-то вроде:

result = ["a"; "e"; "f"; "b"; "d"; "c"] 

но что изменение результата в каждом вызове функции. Поэтому, когда я вызвать функцию в второй раз вернуть что-то вроде:

result = ["c"; "d"; "b"; "f"; "e"; "a"] 
+0

Возможный дубликат [Как перетасовать список в O (n) в OCaml?] (Http://stackoverflow.com/questions/15095541/how-to-shuffle-list-in-on-in-ocaml) – hugomg

+0

thats я вижу, но эта функция повторяет ту же самую перестановку в каждом вызове этой функции. Я пытаюсь создать случайный int 'n' и использовать эту функцию в случайном порядке n раз. –

+0

Теперь Random.int делает то же число каждый раз:/ –

ответ

1

я нашел решение:

let shuffle d = begin 
    Random.self_init(); 
    let nd = List.map (fun c -> (Random.bits(), c)) d in 
    let sond = List.sort compare nd in 
    List.map snd sond 
end 

линия Random.self_init(); Инициализируйте генератор случайным семенем, выбранным системно-зависимым способом.

+0

Возможно, вы хотите инициализировать RNG только один раз, в начале вашей программы (и вне функции тасования). – hugomg

Смежные вопросы