|
|
|
Помогите в лиспе!
|
|||
|---|---|---|---|
|
#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) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2012, 23:18 |
|
||
|
Помогите в лиспе!
|
|||
|---|---|---|---|
|
#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, 01:45 |
|
||
|
Помогите в лиспе!
|
|||
|---|---|---|---|
|
#18+
А нельзя проще? Для первого задания - взять список и его же, сдвинутый на 1 элемент, как-то так: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Для второго, собственно, надо только написать предикат, дальше проблем не вижу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2012, 10:53 |
|
||
|
Помогите в лиспе!
|
|||
|---|---|---|---|
|
#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:31 |
|
||
|
Помогите в лиспе!
|
|||
|---|---|---|---|
|
#18+
AbstractionДля второго, собственно, надо только написать предикат, дальше проблем не вижу. Предикат писать не надо, надо написать функцию-фильтр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2012, 12:33 |
|
||
|
|

start [/forum/topic.php?fid=16&tid=1342035]: |
0ms |
get settings: |
12ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
62ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
2ms |
| others: | 237ms |
| total: | 397ms |

| 0 / 0 |
