如何在SML/NJ中递归生成随机填充列表
我试图用随机数填充一个列表。我要去拿 错误如何在SML/NJ中递归生成随机填充列表,sml,smlnj,Sml,Smlnj,我试图用随机数填充一个列表。我要去拿 错误警告:由于值限制,类型变量未通用化 被实例化为虚拟类型(X1,X2,…)我看到了一些不同的 可能的原因,但我不明白。我需要做什么 改变我仍然不确定这个函数是否有效,因为我 还没有完全运行它 您提供的功能是提供以下类型: fun randomList(n) = let val theList = [] val min = 1 val max = 75 val nextInt = Random.randRange(min,
警告:由于值限制,类型变量未通用化
被实例化为虚拟类型(X1,X2,…)
我看到了一些不同的
可能的原因,但我不明白。我需要做什么
改变我仍然不确定这个函数是否有效,因为我
还没有完全运行它
您提供的功能是提供以下类型:
fun randomList(n) = let
val theList = []
val min = 1
val max = 75
val nextInt = Random.randRange(min,max)
val r = Random.rand(1,1)
val randomValue = nextInt r
in
if n = 0 then []
else
(randomValue::theList;
randomList(n-1)) end;
randomList(50);
那么,为什么‘a’不能推广到int?
让我们看看else分支中的表达式
val randomList = fn : int -> 'a list
表达式(e1;e2)计算e1,然后计算并返回e2,
丢弃e1的结果。从那以后,它应该开始明白为什么它会返回一个“a列表”
好吧,这是有道理的。SML来自Java,与Java大不相同。谢谢你的帮助。我现在唯一的问题是整个列表的
随机值保持不变。如何在每次运行后重置该值?我做随机数的方法有点混乱。我不知道val r
能完成什么。在java中,我只需要nextInt
,然后randomValue
就会得到一个随机值,但在SML中,似乎必须使用3个变量才能得到一个随机值。@XXIV更新了代码,“r”封装了种子的状态,(实际上就是问题所在)稍微更新了我的答案。啊,好的。我以为是种子,但还是不知道怎么处理。谢谢你的链接和所有的帮助!
- val foo = ({}; 5);
val foo = 5 : int
fun randomList (n) =
let fun helper (n, s) theList =
if n = 0
then theList
else
let val min = 1
val max = 75
val nextInt = Random.randRange(min,max)
val randomValue = nextInt s
in helper (n - 1, s) (randomValue::theList)
end;
in helper (n, Random.rand(1, 1)) [] end;