搜索和替换列表上的n元素 - 方案

时间:2010-12-27 22:46:23

标签: scheme

有这样的代码有问题,无法想象如何搜索元素(a)并用(b)替换i,怎么做? Thx提前

2 个答案:

答案 0 :(得分:3)

从列表开始。如果它是空的,请保留它。如果第一个元素是列表,那么您希望递归调用函数。如果第一个元素等于您搜索的内容,请将替换为您的函数在列表其余部分的递归调用 - 您需要继续搜索。如果前面的条件都不成立,那么请将第一个元素放在函数的递归调用中,用于列表的其余部分。

(define (find-replace a b list)
 (cond
  ((null? list) '())
  ((list? (car list)) (cons (find-replace a b (car list)) (find-replace a b (cdr list))))
  ((eq? (car list) a) (cons b (find-replace a b (cdr list))))
  (else
   (cons (car list) (find-replace a b (cdr list))))))

答案 1 :(得分:1)

尝试此功能:

(define subst
  (lambda (new old l)
    (cond
     ((null? l) (quote ()))
     ((atom? (car l))
      (cond
       ((eq? (car l) old) (cons new
                                (subst new old (cdr l))))
       (else (cons (car l)
                   (subst new old (cdr l))))))
     (else (cons (subst new old (car l))
                 (subst new old (cdr l)))))))

这将搜索S表达式列表,并将old的每次出现替换为new

相关问题