2017-10-10 50 views
0

一系列数字,我有几个简单的问题,所以我把它们放在一起:创建红色语言

  1. 什么是创建一系列数字的最佳方式。下面的作品,但有一种简单的方法,如1:10某些语言可用?

    myseries: []

    repeat i 10 [append myseries i]

    print myseries

(1a上。为什么上面的代码此页面上不使通常的代码块?)

  • 同样,创建一系列10个元素的最佳方式是什么,所有启动alized为0或“”?我还必须在那里使用repeat i 10loop 10并连续使用append一个最初的空白系列?

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

    myseries:make block! 10

  • 感谢您的帮助。

    +0

    这绝对是我觉得应该更容易做的事情之一。然而,其中一个原因并非如此,重点是直接对数据进行处理,而不是事先产生一系列数据。尽管如此,我的愿望清单还有很多其他阵列处理功能 –

    回答

    0

    1)我不知道在这个时候更好的方法,虽然https://gitter.im/red/...大约有一系列数据类型或实现

    一)它使一个块的讨论。你看到probe myseries。你能指望什么?

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

    3)如果你不初始化/保留所需要的内存,必须作出一个猜测需要多少内存。这可能超过需要或更少。如果少于红色则需要分配另一块内存。如果你需要更多的内存,这可能会发生几次。如果它想要连续记忆,也许它也必须绕过内存块,但我不知道使用的策略。

    4

    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(或者如果siz只是0 e的块是未知的),以避免不必要的陷阱!见To copy or not to copy, that is the question & Is REBOL a Pure Functional Language?