【问题标题】:Parallel list assignment in Red language红色语言中的并行列表分配
【发布时间】:2018-02-24 08:52:32
【问题描述】:

我有 2 个列表:

alist: [a b c d]
blist: [1 2 3 4]

(实际上它们是很长的列表)。如何一次性将 alist 中的变量分配给 blist 中的相应值?因此 a 变为 1,b 变为 2,依此类推。

我试过了:

foreach i alist j blist [i: j]

但它给出了以下错误:

*** Script Error: j has no value
*** Where: foreach
*** Stack: 

我也试过了:

i: 1
while [true] [ 
    if i > (length? alist) [break]
    alist/i: blist/i  
    i: i + 1
]

但它也不起作用:

*** Script Error: cannot set none in path alist/i:
*** Where: set-path
*** Stack: 

alist/i 和 blist/i 返回 none(使用打印命令检查)。

其他语言也有类似的问题,例如:Parallel array assignment in PHP 和 Parallel assignment in Java?。感谢您的帮助。

【问题讨论】:

    标签: list variable-assignment rebol red


    【解决方案1】:

    简单的方法,将一个列表设置为另一个列表

    >> set alist blist
    == [1 2 3 4]
    >> a
    == 1
    >> b
    == 2
    >> c
    == 3
    >> d
    == 4
    >> alist
    == [a b c d]
    >> reduce alist
    == [1 2 3 4]
    >> get alist/1    
    == 1
    

    以及繁琐的方式

    >> forall alist [alist/1: blist/(index? alist) ]
    >> i: 2
    == 2
    >> get alist/:i
    == 2
    

    【讨论】:

    • 如果i=1,我怎样才能得到一个list/i?
    • 另外,我怎样才能得到一个包含一系列数字的列表,比如 1:10 可能是第 2 步?
    • 是否还有一个映射函数也用红色表示,可以将函数应用于列表的所有元素?
    • 看看 >>help map-each 和 >>help for
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-15
    • 1970-01-01
    相关资源
    最近更新 更多