Схема рекурсии / минусы

Я в начале пути. Я пытался это понять cons расстаться на 2-3 часа, но я попал в беду. Я не мог понять эту часть минусов. Как это сочетается 'a d' в соответствии с результатом?

(define remv
  (lambda (x ls)
    (cond
      [(null? ls) '()]
      [(eqv? (car ls) x) (remv x (cdr ls))]
      [else (cons (car ls) (remv x (cdr ls)))])))

Когда я помещаю ввод, как это:

> (remv 'b '(a b b d)) 

я получил (a d),

Но я не мог понять, как это стало 'a d',

1 ответ

Решение

Чтобы удалить все вхождения x из списка lsУ вас есть три случая для рассмотрения:

  1. ls пусто, и в этом случае результат также пуст,
  2. Первый элемент ls равно x, в этом случае вы просто отбрасываете его и возвращаете остальную часть списка после того, как удалили все xИсходя из этого,
  3. Первый элемент ls отличается от x, в этом случае вы сохраняете этот элемент и вставляете его в начало списка, который не имеет xэс в этом.
Другие вопросы по тегам