Поиск и замена n элемента в списке - схема - PullRequest
1 голос
/ 28 декабря 2010

возникла проблема с выполнением такого рода кода, не можете понять, как искать элемент (a) и заменить i на (b), как это сделать?Спасибо заранее

Ответы [ 2 ]

3 голосов
/ 28 декабря 2010

Начните со списка. Если он пуст, оставь его. Если первый элемент является списком, то вы хотите вызвать свою функцию рекурсивно. Если первый элемент совпадает с тем, что вы ищете, заключите замену в рекурсивный вызов вашей функции в остальной части списка - вам нужно продолжать поиск. Если ни одно из более ранних условий не выполняется, заключите первый элемент в рекурсивный вызов вашей функции для остальной части списка.

(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 голос
/ 28 декабря 2010

Попробуйте эту функцию:

(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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...