Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 27.02.2013
Сообщений: 5
1

Сортировка не реккурентной функцией

27.02.2013, 13:13. Показов 1135. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток. У меня задача упорядочить список по возрастанию. Нашел только реккурентные функции решающие задачу. Проблема в том , что не знаю как передать ей список со значениями. Вот пример функции, которая выбирает дробные элементы. Нужно что то похожее, только с упорядочиванием.

(defun Fo ()

(setq file (open (getfiled "ef" "D:\data" "txt" 0) "r"))

(setq B nil)

(while (setq F (read-line file))

(setq B (cons (atof F) B)))

(setq C nil)

(while B

(if (not (= (fix (car B)) (car B)))

(setq C (cons (car B) C)))

(setq B (cdr B)) )
)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.02.2013, 13:13
Ответы с готовыми решениями:

Использование реккурентной формулы
Найти сумму ряда с точностью e=10 в степени -4, общий член которого An=(10 в степени -n) *(n-1)! (...

Написать программу нахождения n-го элемента реккурентной последовательности
Написать программу нахождения n-го элемента реккурентной последовательности: a0= 1, aI= -...

Найти n-ое число последовательности натуральных чисел по реккурентной формуле
найти n-ое число последовательности натуральных чисел по реккурентной формуле:ai=ai-1+3, где ai=0,...

Сортировка массива функцией
Функции в С++ мы начали учить недавно, поэтому я в них не сильно понимаю. вот написал программу,...

17
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,640
Записей в блоге: 13
27.02.2013, 13:28 2
Цитата Сообщение от r_omanka Посмотреть сообщение
Нашел только реккурентные функции решающие задачу.
- может, все-таки рекурсивные, а не "реккурентные" (правильно это слово пишется так "рекуррентные")

Сортировку легко написать и без рекурсии:

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
(defun sim-sort (lst)
  (let ((res nil))
    (loop 
       (when (null lst) (return res))
       (let* ((mi (apply 'min lst))
              (tmp (remove mi lst))
              (k  (- (length lst) (length tmp))))
             (dotimes (i k t) (setq res (append res (list mi))))
             (setq lst tmp)))))
             
 
 
==> sim-sort
 
(sim-sort '(1 2 3 11 -4 7 12 3 0))
 
==> (-4 0 1 2 3 3 7 11 12)
0
0 / 0 / 0
Регистрация: 27.02.2013
Сообщений: 5
27.02.2013, 19:10  [ТС] 3
да, конечно, вы правы. Огромное спасибо за помощь!

Добавлено через 4 минуты
; error: no function definition: RES можно как то отредактировать код????
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,640
Записей в блоге: 13
27.02.2013, 19:39 4
Проверь, все ли скобки стоят на месте. Вот картинка (LispWorks):
Миниатюры
Сортировка не реккурентной функцией  
1
Эксперт функциональных языков программированияЭксперт Java
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
27.02.2013, 21:08 5
Не, у него похоже MuLisp без let. Ругается соответственно на (let ((res ...)) т.к. пытается интерпретировать (res ...) как вызов функции.

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
(defun some-sort (xs)
  (do (sorted)
      ((null xs) sorted)
    (setq max    (apply     'max xs))
    (setq xs     (remove-one max xs))
    (setq sorted (cons       max sorted))))
 
(defun remove-one (x xs)
  (do (before
       result
       (ys xs (cdr ys)))
      ((cond ((null ys)       (setq result xs) t)
             ((eq x (car ys)) (setq result (append (nreverse before) (cdr ys))) t))
       result)
    (setq before (cons (car ys) before))))
 
(some-sort '(1 2 3 11 -4 7 12 3 0))
; (-4 0 1 2 3 3 7 11 12)
2
0 / 0 / 0
Регистрация: 27.02.2013
Сообщений: 5
27.02.2013, 21:17  [ТС] 6
проверил скобки, все на месте. А по второму коду вот: ; error: no function definition: SORTED
0
Эксперт функциональных языков программированияЭксперт Java
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
27.02.2013, 21:27 7
Цитата Сообщение от r_omanka Посмотреть сообщение
проверил скобки, все на месте. А по второму коду вот: ; error: no function definition: SORTED
Да что у тебя за лисп-то такой?
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,640
Записей в блоге: 13
27.02.2013, 21:29 8
И в muLisp87 все работает:
Миниатюры
Сортировка не реккурентной функцией  
0
Эксперт функциональных языков программированияЭксперт Java
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
27.02.2013, 21:40 9
Цитата Сообщение от Catstail Посмотреть сообщение
И в muLisp87 все работает:
Погоди, а в каком, ты говорил, лиспе нет let?
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,640
Записей в блоге: 13
27.02.2013, 21:47 10
Цитата Сообщение от korvin_ Посмотреть сообщение
Погоди, а в каком, ты говорил, лиспе нет let?
- я ОШИБАЛСЯ. В поставку muLisp входит подргужаемый файл COMMON.LSP (в нем есть базовые, но не все, конструкции CL. Виноват, ввел в заблуждение.
1
Эксперт функциональных языков программированияЭксперт Java
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
27.02.2013, 21:52 11
Цитата Сообщение от Catstail Посмотреть сообщение
Виноват, ввел в заблуждение.
Ниче, бывает. =) libastral мне подсказывает, что у TS MuLisp без этих подгруженных файлов.
1
0 / 0 / 0
Регистрация: 27.02.2013
Сообщений: 5
27.02.2013, 22:22  [ТС] 12
) у меня автокад 2006. а вот что за лисп... ребят, мне на лиспе одну единственную лабу сделать нужно, осталось совсем немного и в этот вот кусок кода упирается все дело. помогите пожалуйста
0
Эксперт функциональных языков программированияЭксперт Java
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
27.02.2013, 22:37 13
AutoLisp. НедоЛисп. Я хз как с ним обращаться. Вроде там let и do должны быть. =/
0
0 / 0 / 0
Регистрация: 27.02.2013
Сообщений: 5
27.02.2013, 22:46  [ТС] 14
ладно, тогда может подскажешь: у меня есть переменная, в нее из файла передаю числа. так вот как дальше функции передать эту переменную (список). я только поэтому рекурсивную функцию не использую- не знаю как значения ей передавать
0
Эксперт функциональных языков программированияЭксперт Java
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
27.02.2013, 23:12 15
А какая разница, рекурсивная она или нет?

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
(defun sort (lst) ; например сортирует
  lst)
 
(defun Fo ()
  (setq file (open (getfiled "ef" "D:\data" "txt" 0) "r"))
  (setq B nil)
  (while (setq F (read-line file))
    (setq B (cons (atof F) B)))
  (setq C nil)
  (while B
    (if (not (= (fix (car B)) (car B))) 
      (setq C (cons (car B) C)))
    (setq B (cdr B)))
  (sort C))
0
Заблокирован
02.03.2013, 11:22 16
В данном случае грубая ошибка у ТС и korvin в том, что открытый файл не закрыт после чтения, а сортировка что? сортировка по возрастанию пишется в одну строчку, читайте матчасть

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
(defun foo (fn / *error* fd lst)
 
  (defun *error* (msg) (close fd))
 
  (if (and fn (findfile fn)) ; findfile тут вообще-то для красоты только
    (progn
      (setq lst '() ; самая бесполезная строчка =)
        fd  (open fn "r") ; открываем файл
      )
 
      (while (setq str (read-line fd)) ; читаем файл
    (if (/= str "") ; но не весь, а с условием
      (setq lst (cons (atof str) lst)) ; добавляем значение в список, все равно куда...
    )
      )
 
      (*error* nil) ; закрываем файл!!!
 
      (vl-sort lst '<) ; вот собственно и вся сортировка
 
    )
  )
)
 
 
(defun test ()
  (foo (getfiled "" "D:\data" "txt" 0))
)
зы let и do в автолиспе НЕТ
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,640
Записей в блоге: 13
02.03.2013, 11:38 17
Цитата Сообщение от ur_naz Посмотреть сообщение
сортировка по возрастанию пишется в одну строчку
- точнее, вызов функции сортировки.
0
Эксперт функциональных языков программированияЭксперт Java
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
02.03.2013, 13:57 18
Цитата Сообщение от ur_naz Посмотреть сообщение
В данном случае грубая ошибка у ТС и korvin в том, что открытый файл не закрыт после чтения
Я с автолиспом незнаком вообще.
0
02.03.2013, 13:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.03.2013, 13:57
Помогаю со студенческими работами здесь

Сортировка функцией Array.Sort
Даже числа не выводит,чес слово. Что исправить? static void Main(string args) { ...

Не работает сортировка с лямбда функцией
Здравствуйте! Возник вопрос по поводу использования лямба-функции в качестве параметра key при...

Сортировка массива объектов функцией sort
Не получается отсортировать массив объектов. После сортировки должен вывестись список...

Сортировка std::list с функцией sort()
У меня задание написать Отсортировать числовую последовательность в порядке возрастания...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru