> 1 <

Автор Сообщение

Vaniok

Members


Статус

2 сообщений

Где: Ukraine
Род занятий:
Возраст:

#6722   2012-11-02 21:45 GMT+3 часа(ов)      
Помогите пожалуйста решить таку задачку. Определить функцию УДАЛИТЬ (Е, Х), которая удаляет все вхождения заданного элемента Е в списке Х. Вот функция которая удаляет атом со списка а надо сделать еще возможность удалять список и пару с списка Х.
(define del_el (lambda (lst el) (cond ((eq? lst '()) '())
((eq? (car lst) el) (del_el (cdr lst) el))
(#t (cons (car lst) (del_el (cdr lst) el))))))

Aoloa

Members


Статус

37 сообщений

Где: Ukraine
Род занятий:
Возраст:

#6723   2012-11-02 22:50 GMT+3 часа(ов)      
Цитата
Вот функция которая удаляет атом со списка а надо сделать еще возможность удалять список и пару с списка Х.

Ваша функция правильная, достаточно заменить eq? на equal?.

В случае с парами и списками eq? равно #t только тогда, когда пара хранится в одном и том же месте в памяти (т.е. (eq? '(1 . 2) (cons 1 2)) будет равно #f), а equal? сравнивает каждый элемент списка (т.е. (eq? '(1 . 2) (cons 1 2)) будет равно #t).
With iTeX* your entire life can be encapsulated into a dynamic hyperdocument, downloadable by anybody you designate (Donald E. Knuth, An Earthshaking Announcement)

Vaniok

Members


Статус

2 сообщений

Где: Ukraine
Род занятий:
Возраст:

#6724   2012-11-02 23:05 GMT+3 часа(ов)      
Цитата
Aoloa :
Цитата
Вот функция которая удаляет атом со списка а надо сделать еще возможность удалять список и пару с списка Х.

Ваша функция правильная, достаточно заменить eq? на equal?.

В случае с парами и списками eq? равно #t только тогда, когда пара хранится в одном и том же месте в памяти (т.е. (eq? '(1 . 2) (cons 1 2)) будет равно #f), а equal? сравнивает каждый элемент списка (т.е. (eq? '(1 . 2) (cons 1 2)) будет равно #t).


Надо сделать с помощью базовых функций. также должно работать типу (del_el '(1 2 ( 3 (ф c) 2) ф . c) '(ф . с))
> 1 <


Онлайн :

0 пользователь(ей), 64 гость(ей) :