球拍:不断更新新结果列表

时间:2014-11-26 05:37:39

标签: scheme racket

假设我有2个列表。

(define wholelist '(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20))
(define firstlist '(1 3 4 6 7 8 10 13 15 18))

(define (removelist list1 list2)
        (remove* list1 list2))

(removelist firstlist wholelist)

> '(2 5 9 11 12 14 16 17 19 20)

它完美无缺。但我想做的是,假设我想从整个列表中删除另一个列表,但这一次,整个列表将是上述代码的结果。

(defind secondlist '(2 3 5 6 7 10 13 16 17 18 19 20))

(removelist secondlist wholelist)

> '(1 4 8 9 11 12 14 15)       --> i want this result as '(9 11 12 14)

所以我希望整个列表不断更新,以便我可以使用它进行进一步的计算。 有没有办法在不定义新列表的情况下将整个列表值更改为第一次计算的结果?

非常感谢你!

1 个答案:

答案 0 :(得分:0)

所以你想要的是

> (removelist secondlist (removelist firstlist wholelist))
'(9 11 12 14)

如果您需要将其拆分为两个步骤,则需要将(removelist firstlist wholelist)的中间结果与defineletset!绑定,具体取决于具体情况:< / p>

  1. 你想改变原始绑定 - 使用set!(不推荐)
  2. 如果您可以引入新的临时绑定(可能使用相同的名称,隐藏原始内容) - 请使用definelet
  3. 后者的例子:

    > (let ((wholelist (removelist firstlist wholelist))) 
        (removelist secondlist wholelist))
    '(9 11 12 14)