我想访问元组的随机成员,但我不确定如何将#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
设置为变量?
非常感谢你!!
答案 0 :(得分:2)
我想你不能。访问运营商的类型是什么? 如果您想要动态随机访问数据,则应首先将其转换为矢量。
PS:有些语言(Coq,Agda等)可以输入这样的访问操作符,但这需要依赖类型(或者至少是类型级整数加上一些魔法,也许Omega也可以这样做)。答案 1 :(得分:2)
有一些解决方法,例如,您可以显式匹配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)
希望它能以某种方式帮助你。