用 Red 语言从多个列表中获取值到一个列表
Getting values from multiple lists to one in Red language
我想将 2 个系列的值合并为一个系列,但它不起作用:
我有 2 个系列:
a: [1 2 3]
b: [4 5 6 7]
我想获取一个列表中的所有值,以便我可以通过 allv/1、allv/2...allv/7 访问它们。
以下不起作用,因为它生成一系列系列而不是一系列值:
allv: [a b]
print allv ; => prints all 6 values, but following do not work:
print allv/1 ; => gives a (desired is 1)
print allv/2 ; => gives b (desired is 2)
print allv/3 ; => gives none (desired is 3)
我尝试使用以下函数将值组合成一个系列:
mycombine: function [ll][
temp: []
foreach l ll [
repeat i length? l [
temp: append temp l/:i ] ]
temp]
mycombine [a b]
但是上面给出了错误:
*** Script Error: length? does not allow word! for its series argument
*** Where: length?
*** Stack: rncombine
该系列已转换为 word,无法正常工作。
我该如何解决这个问题?
只需追加
a: [1 2 3]
b: [4 5 6 7]
c: [8 9 10]
d: [11 12 13 14]
>> allv: append a b
== [1 2 3 4 5 6 7]
>> a
== [1 2 3 4 5 6 7]
做你想做的事。但要注意即使 a 包含所有值,因为您已将 b 的值附加到块 a。如果你想要一个新的块,你必须使用
allv: append copy a b
如果你想追加更多的系列,你可以这样做
>> foreach x [a b c d] [ append [] reduce x]
== [1 2 3 4 5 6 7 8 9 10 11 12 13 14]
而不是 reduce get x
也在工作。
另一种组合方式
>> compose [(a) (b) (c)]
== [1 2 3 4 5 6 7 8 9 10 ]
我想将 2 个系列的值合并为一个系列,但它不起作用:
我有 2 个系列:
a: [1 2 3]
b: [4 5 6 7]
我想获取一个列表中的所有值,以便我可以通过 allv/1、allv/2...allv/7 访问它们。
以下不起作用,因为它生成一系列系列而不是一系列值:
allv: [a b]
print allv ; => prints all 6 values, but following do not work:
print allv/1 ; => gives a (desired is 1)
print allv/2 ; => gives b (desired is 2)
print allv/3 ; => gives none (desired is 3)
我尝试使用以下函数将值组合成一个系列:
mycombine: function [ll][
temp: []
foreach l ll [
repeat i length? l [
temp: append temp l/:i ] ]
temp]
mycombine [a b]
但是上面给出了错误:
*** Script Error: length? does not allow word! for its series argument
*** Where: length?
*** Stack: rncombine
该系列已转换为 word,无法正常工作。
我该如何解决这个问题?
只需追加
a: [1 2 3]
b: [4 5 6 7]
c: [8 9 10]
d: [11 12 13 14]
>> allv: append a b
== [1 2 3 4 5 6 7]
>> a
== [1 2 3 4 5 6 7]
做你想做的事。但要注意即使 a 包含所有值,因为您已将 b 的值附加到块 a。如果你想要一个新的块,你必须使用
allv: append copy a b
如果你想追加更多的系列,你可以这样做
>> foreach x [a b c d] [ append [] reduce x]
== [1 2 3 4 5 6 7 8 9 10 11 12 13 14]
而不是 reduce get x
也在工作。
另一种组合方式
>> compose [(a) (b) (c)]
== [1 2 3 4 5 6 7 8 9 10 ]