用红色语言创建一系列数字
Creating a series of numbers in Red language
我有几个简单的问题,因此我将它们放在一起:
创建一系列数字的最佳方法是什么。以下是可行的,但是否有更简单的方法,如 1:10 在某些语言中可用?
myseries: []
repeat i 10 [append myseries i]
print myseries
(1a.为什么上面的代码没有在这个页面上做通常的代码块?)
同样,创建一系列 10 个元素并全部初始化为 0 或 "" 的最佳方法是什么?我是否还必须在那里使用 repeat i 10
或 loop 10
并连续 append
一个最初的空白系列?
此外,我是否应该在最初创建系列时像下面的代码那样指定元素的数量?不这样做的缺点是什么?
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?
我有几个简单的问题,因此我将它们放在一起:
创建一系列数字的最佳方法是什么。以下是可行的,但是否有更简单的方法,如 1:10 在某些语言中可用?
myseries: []
repeat i 10 [append myseries i]
print myseries
(1a.为什么上面的代码没有在这个页面上做通常的代码块?)
同样,创建一系列 10 个元素并全部初始化为 0 或 "" 的最佳方法是什么?我是否还必须在那里使用
repeat i 10
或loop 10
并连续append
一个最初的空白系列?此外,我是否应该在最初创建系列时像下面的代码那样指定元素的数量?不这样做的缺点是什么?
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?