Схема Как удалить элементы из списка? - PullRequest
2 голосов
/ 15 декабря 2010
(define (delete atm lis)
  (cond

   ((eq? atm (car lis)) (cdr lis))
   (else (cons (car lis) (delete atm (cdr lis))))))

(delete  'a  '(b c d a))
(delete  'the  '(the more you practice the better you will be))
(delete  'cat  '((dog cat) mouse cat (elephant) (cat) cat))
(delete  'rainy  '( the weather can be (rainy) sunny cloudy and cold))

вывод, который я хочу:

  1. (b c d)
  2. (чем больше тренируешься, тем лучше будешь)
  3. ((собачья кошка) мышь (слон) (кошка))
  4. (погода может быть (дождливой) солнечно облачно и холодно)

но есть много неправильных, пожалуйста, помогите мне, спасибо

Ответы [ 3 ]

1 голос
/ 15 декабря 2010

Два других ответа (которые, кстати, идентичны) в настоящее время работают только на верхнем уровне списка.Если вы также хотите, чтобы он удалил ваш атом из всех вложенных списков, вам придется искать там также:

(define (delete atm lis)
 (cond
  ((null? lis) lis)
  ((eq? atm (car lis)) (delete atm (cdr lis)))
  ((list? (car lis)) (cons (delete atm (car lis)) (delete atm (cdr lis))))
  (else (cons (car lis) (delete atm (cdr lis))))))

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

1 голос
/ 15 декабря 2010

Вы на самом деле ничего не удаляете.Ваша процедура обычно называется remq.

Следующее должно работать (не проверено):

(define (delete atm lis)
  (cond
    ((null? lis) lis)
    ((eq? atm (car lis)) (delete atm (cdr lis)))
    (else (cons (car lis) (delete atm (cdr lis))))))
0 голосов
/ 15 декабря 2010

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

(define (delete atm lis)
  (cond
   ((null? lis) '())
   ((eq? atm (car lis)) (delete atm (cdr lis)))
   (else (cons (car lis) (delete atm (cdr lis))))))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...