用红色语言创建一系列数字

Creating a series of numbers in Red language

我有几个简单的问题,因此我将它们放在一起:

  1. 创建一系列数字的最佳方法是什么。以下是可行的,但是否有更简单的方法,如 1:10 在某些语言中可用?

    myseries: []

    repeat i 10 [append myseries i]

    print myseries

(1a.为什么上面的代码没有在这个页面上做通常的代码块?)

  1. 同样,创建一系列 10 个元素并全部初始化为 0 或 "" 的最佳方法是什么?我是否还必须在那里使用 repeat i 10loop 10 并连续 append 一个最初的空白系列?

  2. 此外,我是否应该在最初创建系列时像下面的代码那样指定元素的数量?不这样做的缺点是什么?

    myseries:制作方块! 10

感谢您的帮助。

1) 虽然在 https://gitter.im/red/... 上有关于范围数据类型或 for 实现 [=13] 的讨论,但目前我不知道有什么更好的方法=]

a) 它构成了一个块。你会看到 probe myseries。你期待什么?

2) >> append/dup [] 0 10 == [0 0 0 0 0 0 0 0 0 0]

3) 如果你没有initialize/reserve需要的内存,Red就得猜测需要多少内存。这可能比需要的多或少。如果小于,则 Red 必须分配另一块内存。如果您需要更多内存,这可能会发生几次。如果它想要连续的内存,也许它也必须在内存块中移动,但我不知道所使用的策略。

1) 我更喜欢在此处使用 COLLECT

myseries: collect [repeat i 10 [keep i]]

2) 参见ARRAY函数:

>> array/initial 10 0
== [0 0 0 0 0 0 0 0 0 0]

你也可以传递一个匿名函数给它:

>> i: 0 array/initial 10 does [i: i + 1]
== [1 2 3 4 5 6 7 8 9 10] 

3) 通常最好使用 myseries: make block! 10(如果块大小未知,则只使用 0)以避免不必要的陷阱!参见 To copy or not to copy, that is the question & Is REBOL a Pure Functional Language?