使用红色语言将多个列表中的值转换为一个

时间:2017-09-22 07:57:18

标签: list rebol red

我希望将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 

这个系列已经转换为单词并且无效。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

只需附加

cin.get()

做你想要的。但要注意,即使包含所有值,因为您已将b的值与块a相关联。如果你想要一个新的块,你必须使用

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]

如果你想附加更多系列,你可以

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] 也在起作用。 另一种组合方式

get x