如何使用Red语言创建从1000到9999的序列

时间:2019-01-18 21:52:22

标签: red

我使用Red language,从1000到9999之间选择一个随机数。查看了random的文档后,我希望random从一系列的数字中选择一个数字从1000到9999。

我知道我可以做999 + (random 9000),但我认为这听上去不好。

2 个答案:

答案 0 :(得分:4)

有一种成熟的方法可以计算两个包含边界之间的随机数:

(random(0,1)  * (max - min + 1)) + min

将其移植到Red应该很简单,将其包装到专用功能中将减轻对“可读性”的关注。例如:

>> between: func [lower upper][-1 + lower + random upper - lower + 1]
== func [lower upper][-1 + lower + random upper - lower + 1]
>> round average collect [loop 1'000'000 [keep between -10 10]]
== 0.0

-1弥补了random范围始于1而不是0的事实。

poka-yoke between将通过从两个给定的边界中选取最小值/最大值来确保下限确实比上限更低。我将此留给读者练习。

从字面上选择一系列随机数的另一种方法是:

>> thru: make op! func [lower upper][collect [until [keep lower greater? lower: lower + 1 upper]]]
== make op! [[lower upper]]
>> -10 thru 10
== [-10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10]
>> random/only -10 thru 10
== 5

答案 1 :(得分:3)

您可以定义自己的函数,例如

random2: function [a b] [a - 1 + random b - a + 1]

然后random2 1000 9999