| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > LISP > Вставка элемента в упорядоченный массив |
| Автор: Inkvizitor 24.12.2006, 13:05 |
| Нужно итеративное решение. Я написал код, но он почему-то криво работает. НЕ могу найти ошибку. Помогите исправить. (defun vstavka (list1 list2) (do ((list3 nil)) ((null list2) list3) (cond ((null list1)(print list1) (progn (setq list3 (append list3 list2)) (setq list2 nil))) ((null list2) (progn (setq list3 (append list3 list1)) (setq list1 nil))) ((< list1 (car list2)) (print list1) (progn (append list3 (cons list1 nil)) (print list3)(print list1) (setq list1 nil))) (t (progn (setq list3 (append list3 (cons (car list2) nil))) (setq list2 (cdr list2)))) ) ) ) (trace vstavka) (vstavka 5 '(6 7)) |
| Автор: svg 24.12.2006, 14:06 | ||
|
| Автор: Inkvizitor 24.12.2006, 19:32 |
| Я еще новичок. Вы могли бы объснить свой код, а то я в нем много не понимаю, или лучше скажите что в моем неправильно. У меня ваш код не работает. Забыл сказать, что надо все сделать на XLISP. (defun nvstavka1 (elt list &key (test #'<) (key #'identity)) (let ((tail (member elt list :key key :test test))) (if tail (progn (rplacd tail (copy-list tail)) (rplaca tail elt) list) (nconc list (list elt))))) это выдает ошибку, пришлось убрать все агрументы по умолчанию. Запустил. Некорректно не работает. Например (nvstavka1 5 '(6 7)) возвращает (6 7 5). В первом примере я вообще ничего не понимаю. ЧТо делает do-vstavka, labels? |
| Автор: Inkvizitor 24.12.2006, 20:34 |
| Всем спасибо за внимание. Я нашел ошибку. Тему можно удалять. |
| Автор: _sg 24.4.2014, 20:14 | ||
как вариант:
|