
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
22.11.2012, 23:18
|
|||
|---|---|---|---|
|
|||
Помогите в лиспе! |
|||
|
#18+
Помогите, пожалуйста! Так могу функцию написать, а с помощью функционалов не получается((( Напишите функцию, удаляющую повторные вхождения элементов в список > (del_rep_list '(1 2 2 3 4 4 4 5)) (1 2 3 4 5) Фильтр, выделяющий из заданного списка элементы заданного типа (числа, строки, атомы...) > (fltr 'numberp '(1 a 2 3 'bc (1 2))) (1 2 3) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
23.11.2012, 01:45
|
|||
|---|---|---|---|
|
|||
Помогите в лиспе! |
|||
|
#18+
SavaMargo, SelznnНапишите функцию, удаляющую повторные вхождения элементов в список Делал что-то похожее для лабы, длинный код, правда, но работает, делал так: ;Delete all elements in lst (except the first) which are equal to the first one. ;Ex (3 nil 3 3 1 3 1 2 nil) -> (3 nil 1 1 2 nil) (defun del_rep_el (lst) (cond ((null lst) nil) ((equal (length lst) 1) lst) (t (del_rep_el_helpf (list (car lst)) (cdr lst))) ) ) ;help function for del_rep_el function (defun del_rep_el_helpf (left right) (let ((right (del_frst_eq_ord right))) (cond ((null right) left) ((and (equal (car left) (car right)) (equal (length right) 1)) left) ((equal (car left) (car right)) (del_rep_el_helpf (append left (list (cadr right))) (cddr right) ) ) (t (del_rep_el_helpf (append left (list (car right))) (cdr right) ) ) ) ) ) ;Delete first equal ordered elements saving only the one of these in lst ;Ex: (3 3 3 2 3 3 2 1) -> (3 2 3 3 2 1) (defun del_frst_eq_ord (lst) (cond ((null lst) nil) ((equal (length lst) 1) lst) ((equal (car lst) (cadr lst)) (del_frst_eq_ord (cdr lst))) (t lst) ) ) ;Functional executes fn on lst and appends the car of result with ;executing oneself on the cdr of result (defun mymap (fn lst) (setq res (funcall fn lst)) (cond ((null lst) nil) (t (append (list (car res)) (mymap fn (cdr res)) ) ) ) ) Синтаксис тут не подсвечивается, так что за оформление извините. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
23.11.2012, 10:53
|
|||
|---|---|---|---|
|
|||
Помогите в лиспе! |
|||
|
#18+
А нельзя проще? Для первого задания - взять список и его же, сдвинутый на 1 элемент, как-то так: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Для второго, собственно, надо только написать предикат, дальше проблем не вижу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
23.11.2012, 12:31
|
|||
|---|---|---|---|
Помогите в лиспе! |
|||
|
#18+
Интересно какое окружение у автора. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
23.11.2012, 12:33
|
|||
|---|---|---|---|
Помогите в лиспе! |
|||
|
#18+
AbstractionДля второго, собственно, надо только написать предикат, дальше проблем не вижу. Предикат писать не надо, надо написать функцию-фильтр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=16&mobile=1&tid=1342035]: |
0ms |
get settings: |
11ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
179ms |
get topic data: |
10ms |
get forum data: |
4ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 235ms |
| total: | 522ms |

| 0 / 0 |
