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