Как получить доступ к случайному члену кортежа? - PullRequest
2 голосов
/ 14 апреля 2011

Я хотел бы получить доступ к случайному члену кортежа, и я не уверен, как установить #n в переменную.

Вот мой код:

val lis = ("a","b","c","d")
val randNumber = Random.randRange (1,4) (Random.rand (0,1)) 
val randChar = #randNumber lis //this is where its failing

Вот как я обычно получаю доступ, скажем, член № 2:

val lis = ("a","b","c","d")
val ranChar = #2 lis;

Итак, мой вопрос, как мне установить #2 для переменной в приведенном выше примере ??

Заранее большое спасибо !!

Ответы [ 2 ]

2 голосов
/ 14 апреля 2011

Есть несколько обходных путей, например, вы можете явно сопоставить randNumber и вызвать соответствующие функции-члены:

    val randChar = case randNumber of
                      1 => #1 lis
                    | 2 => #2 lis
                    | 3 => #3 lis
                    | _ => #4 lis

Конечно, этот не очень хорошо масштабируется. Другим обходным решением является изменение представления lis на List и использование List.nth:

List.nth(lis, randNumber-1)

Надеюсь, это вам как-нибудь поможет.

2 голосов
/ 14 апреля 2011

Полагаю, вы не можете. Какой будет тип оператора доступа? Если вам нужен динамический произвольный доступ к вашим данным, вы должны сначала преобразовать его в вектор.

PS: есть языки (Coq, Agda и т. Д.), Где такой оператор доступа может быть набран, но для этого потребуются зависимые типы (или, по крайней мере, целые числа уровня типа плюс немного магии, возможно, Омега также может сделать это).

...