Scheme - 迭代并替换list的元素

时间:2016-10-28 22:09:28

标签: list loops scheme

在方案中,如果我有一个列表

('foo 'foo 8 'foo 9)

和另一个清单

(1 2 4)

我希望我的结果列表是

(1 2 8 4 9)

我知道基本逻辑:遍历列表1.如果'foo,请用列表2的汽车替换。

我写这篇文章时遇到了麻烦,有什么建议吗?

1 个答案:

答案 0 :(得分:1)

假设替换列表中的元素数量与输入列表中foo的数量相同,我们只需遍历两个列表并在找到foo时进行替换,我们可以"循环"使用递归遍历列表:

(define (replace lst rep)
  (cond ((or (null? lst) (null? rep))
         lst)
        ((eq? (car lst) 'foo)
         (cons (car rep) (replace (cdr lst) (cdr rep))))
        (else
         (cons (car lst) (replace (cdr lst) rep)))))

例如:

(replace '(foo foo 8 foo 9) '(1 2 4))
=> '(1 2 8 4 9)