Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сортировка Шелла на newlisp-tk, помогите найти ошибку в коде 
V
    Опции темы
Lion13
Дата 22.3.2008, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 22.3.2008

Репутация: нет
Всего: нет



Собственно код уже наработан на 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))

PM MAIL   Вверх
Lion13
  Дата 15.4.2008, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 22.3.2008

Репутация: нет
Всего: нет



Никто не может помоч? =(
PM MAIL   Вверх
mrco
Дата 17.4.2008, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 4.10.2006

Репутация: 1
Всего: 1



кажется sort занятый системный символ, попробуйте поменять название фнукции.
PM MAIL   Вверх
Lion13
Дата 25.4.2008, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 22.3.2008

Репутация: нет
Всего: нет



спасибо...как всегда все очевидно...а искал более большую проблему))))))
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума LISP
Void
  • Пожалуйста, создавайте темы с содержательными названиями.
  • Lisp — это целое семейство языков. Всегда указывайте в теме используемый диалект (Common Lisp, Scheme и т.д.).
  • Уважаемые учащиеся, здесь всегда рады помочь Вам, но не делать за Вас вашу работу. У вас гораздо больше шансов получить помощь, если Вы приложите усилия и поделитесь с нами проблемами и результатами. В противном случае добро пожаловать в раздел Центр Помощи.
  • Получив ответ на интересующий Вас вопрос, не забудьте пометить его как решённый.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | LISP | Следующая тема »


 




[ Время генерации скрипта: 0.0831 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.