Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > LISP > Сортировка Шелла на newlisp-tk


Автор: Lion13 22.3.2008, 17:36
Собственно код уже наработан на newlisp только ошибку выдает
"symbol is protected in function define : (sort hh lst)"
Возможно из-за того, что передается пустой список в sort
Вообщем, помогите, чем сможете. сдавать скоро.


Код

;Функция для получения списка, состоящего из h-1 первых элементов

(define (sfirst h lst)
   (cond 
      ((<= h 1) '()) 
      ((null? (rest lst)) lst)
      (true
         (cons (first lst) (sfirst (- h 1) (rest lst)))
      )
   )
)

;Функция для получения списка, соответствующего исходному без первых h-1 элементов
(define (srest h lst)
   (cond 
     ((= h 1) lst)
     ((null? lst) lst)
     (true
         (srest (- h 1) (rest lst))
     )
   )
)

;Функция для вставки элемента в список с учётом шага h
(define (insert obj h lst)
   (cond
       ( (null? (srest h lst)) 
          (cons obj lst)
       )
       ( (<= obj (first (srest h lst)))
          (cons obj lst)
       )
       (true     
          (append (cons (first (srest h lst)) (sfirst h lst)) (insert obj h (srest (+ h 1) lst)))
       )
   )
)

;Функция сортировки методом вставок с шагом h
(define (sort hh lst)
  (cond
     ((null? lst) '())
     (true 
        (insert (first lst) hh (sort hh (rest lst)))
     )
  )
)

;Вспомогательная функция для сортировки
(define (shell_vc lst t h)
   (cond
      ((<= t 0) lst) 
      (true
         (sort h (shell_vc lst (- t 1) (+ (* h 2) 1)))
      )
   )
)


;Основная функция сортировки Шелла
(define (shell lst)
     (shell_aux lst (- (floor (log (length lst) 2)) 1) 1)
)

;Тестирование
;(shell '(21 32 13 46 3 67 65 40))
;(shell '(64 77 19 32 65 98 54 86))
(shell '(84 9 52 2 78 11 71 41))

Автор: Lion13 15.4.2008, 17:42
Никто не может помоч? =(

Автор: mrco 17.4.2008, 10:49
кажется sort занятый системный символ, попробуйте поменять название фнукции.

Автор: Lion13 25.4.2008, 22:37
спасибо...как всегда все очевидно...а искал более большую проблему))))))

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)