2017-10-19 175 views

回答

6
  • AT可以寻求在列表中的位置。
  • COPY将会从列表的最后一个位置复制,默认情况下
  • COPY的/PART细化可以让你添加一个限制复制

传递一个整数/部分假设多少你要复制的东西:

>> list: [1 2 3 4 5 6 7 8 9] 

>> copy/part (at list 3) 5 
== [3 4 5 6 7] 

如果你提供一系列位置是结束,那么它会复制高达这一点,所以如果你的范围意味着包容性,你必须通过它。

>> copy/part (at list 3) (next at list 7) 
== [3 4 5 6 7] 

对于范围方言有一些建议,我找不到任何副手。简单的代码来出主意:

range: func [list [series!] spec [block!] /local start end] [ 
    if not parse spec [ 
     set start integer! '.. set end integer! 
    ][ 
     do make error! "Bad range spec, expected e.g. [3 .. 7]" 
    ] 
    copy/part (at list start) (next at list end) 
] 

>> list: [1 2 3 4 5 6 7 8 9] 

>> range list [3 .. 7] 
== [3 4 5 6 7] 
+0

哇什么答案;) – user310291

+0

在列表n **中不需要括号** – sqlab

3
>> list: [1 2 3 4 5 6 7 8 9] 
== [1 2 3 4 5 6 7 8 9] 
>> copy/part skip list 2 5 
== [3 4 5 6 7] 

所以,你可以跳到列表中的正确位置,然后尽可能多的连续的成员,因为你需要复制。

如果你想要一个等价的函数,你可以自己写。