Загрузка данных


(define (uniq xs)
  (cond ((null? xs) '())
        ((null? (cdr xs)) xs)
        ((equal? (car xs) (cadr xs)) (uniq (cdr xs)))
        (else (cons (car xs) (uniq (cdr xs))))))

(define (delete pred? xs)
  (cond ((null? xs) '())
        ((pred? (car xs)) (delete pred? (cdr xs)))
        (else (cons (car xs) (delete pred? (cdr xs))))))

(define (polynom xs x)
  (if (null? xs)
      0
      (+ (* (car xs) (expt x (- (length xs) 1)))
         (polynom (cdr xs) x))))

(define (intersperse e xs)
  (cond ((null? xs) '())
        ((null? (cdr xs)) xs)
        (else (cons (car xs) (cons e (intersperse e (cdr xs)))))))


(define (all? pred? xs)
  (or (null? xs)
      (and (pred? (car xs))
           (all? pred? (cdr xs)))))


(define (o . fs)
  (lambda (x)
    (if (null? fs)
        x
        ((car fs) ((apply o (cdr fs)) x)))))

                    




Курсы
Сообщения
Выход
промотать до индивидуального варианта
Лабораторная работа № 1Б. Рекурсия, процедуры высшего порядка, обработка списков
Дубанов А.В., Коновалов А.В.

22 сентября 2026

Цель работы
Приобретение навыков работы с основами программирования на языке Scheme: использование рекурсии, процедур высшего порядка, списков.

Задания
При выполнении заданий не используйте присваивание, циклы и обращение к элементам последовательности по индексу. Избегайте возврата логических значений из условных конструкций. Продемонстрируйте работоспособность процедур на примерах.

Индивидуальный вариант

Реализуйте процедуру (uniq xs), удаляющую из списка xs соседние дубликаты. Примеры применения процедуры:

(uniq '(a a b c c c d d a b a))   ⇒ (a b c d a b a)
(uniq '(1 1 2 2 2 3 4 4 1))       ⇒ (1 2 3 4 1)
(uniq '((x 7) (x 7) (y 5) (y 5))) ⇒ ((x 7) (y 5))
(uniq '(a))                       ⇒ (a)
(uniq '())                        ⇒ ()
Примечание. Для сравнения символов на равенство используйте предикат (equal? x y).

Реализуйте процедуру (delete pred? xs), которая «удаляет» из списка xs все элементы, удовлетворяющие предикату pred?. Примеры применения процедуры:

(delete even? '(0 1 2 3)) ⇒ (1 3)
(delete even? '(0 2 4 6)) ⇒ ()
(delete even? '(1 3 5 7)) ⇒ (1 3 5 7)
(delete even? '())        ⇒ ()
(delete odd? '(0 1 2 3))  ⇒ (0 2)
(delete zero? '(0 1 2 3))  ⇒ (1 2 3)
Реализуйте процедуру (polynom (an … a1 a0) x), принимающую список коэффициентов и переменную и вычисляющую значение полинома an ⋅ xn + a1 ⋅ x + …a0. Примеры применения процедуры:

(polynom '(3 5 2 8) 4)   ⇒ 288
(polynom '(83 -53 74) 7) ⇒ 3770
(polynom '(4) 100)       ⇒ 4
Реализуйте процедуру (intersperse e xs), которая возвращает список, полученный путём вставки элемента е между элементами списка xs. Примеры применения процедуры:

(intersperse 'x '(1 2 3 4)) ⇒ (1 x 2 x 3 x 4)
(intersperse 'x '(1 2))     ⇒ (1 x 2)
(intersperse 'x '(1))       ⇒ (1)
(intersperse 'x '())        ⇒ ()
Реализуйте предикат (all? pred? xs), который возвращает #t, если все элементы списка xs удовлетворяет предуикату pred?. Не используйте условные конструкции, вместо них используйте особенности встроенных and и or. Примеры применения:

(all? odd? '(1 3 5 7)) ⇒ #t
(all? odd? '(0 1 2 3)) ⇒ #f
(all? odd? '(0 2 4 6)) ⇒ #f
(all? odd? '()) ⇒ #t ; Это - особенность, реализуйте её
Реализуйте композицию функций (процедур) одного аргумента, для чего напишите процедуру o, принимающую произвольное число процедур одного аргумента и возвращающую процедуру, являющуюся композицией этих процедур. Примеры применения процедуры:

(define (f x) (+ x 2))
(define (g x) (* x 3))
(define (h x) (- x))

((o f g h) 1) ⇒ -1
((o f g) 1)   ⇒ 5
((o h) 1)     ⇒ -1
((o) 1)       ⇒ 1
Вопросы для защиты лабораторной работы
В каких процедурах вы использовали хвостовую рекурсию? Обоснуйте свой ответ.
Какова алгоритмическая сложность написанных вами процедур? Почему?
Отчёт по лабораторной работе № 2
Отчёт должен содержать примеры, предложенные преподавателем и задания из индивидуального варианта, и то, и другое — с тестированием.

Отчёт выполняется в разметке Markdown по следующему шаблону:

% Лабораторная работа № 1Б. Рекурсия, процедуры высшего порядка, обработка списков
% <лабораторная ещё не сдана>
% Владислава Третьякова, ИУ9-12/6

# Цель работы
…переписываете цель работы из задания…

# Индивидуальный вариант
…названия процедур, которые требуется реализовать…

# Реализация

```scheme
(define (hello name)
  (display "Привет, ")
  (display name)
  (display "!\n"))
```

# Тестирование

```
Welcome to DrRacket, version 6.10.1 [3m].
Language: R5RS; memory limit: 128 MB.
> (hello "Вася")
Привет, Вася!
> (hello "Пупкин")
Привет, Пупкин!
```

# Вывод
…пишете, чему научились…
В отчёте приведён лишь необходимый минимум. Можно писать больше и интереснее — интересные и вдумчивые отчёты поощряются дополнительным баллом.

Ваш отчёт будет конвертирован в PDF при помощи pandoc следующей командой:

pandoc \
  --pdf-engine=xelatex \
  -V 'mainfont:Liberation Serif' \
  -V 'monofont:Liberation Mono' \
  "$SOURCE" -o "$PDF"
Дедлайн и ачивка
5 баллов:
студент на паре выдачи подвесил черновик, в котором выполнено не менее 4 заданий и защитил ещё на следующем занятии.
4 балла — в остальных случаях.
Ачивка: сдать лабораторную на паре выдачи — +1 балл.
Язык реализации: Markdown Это черновик!
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
29
 
(define (uniq xs)
  (if (null? xs)
      '()
      (let loop ((lst (cdr xs)) (acc (list (car xs))))
        (cond ((null? lst) (reverse acc))
              ((equal? (car lst) (car acc)) (loop (cdr lst) acc))
              (else (loop (cdr lst) (cons (car lst) acc)))))))
`````
(define (delete pred? xs)
  (cond ((null? xs) '())
        ((pred? (car xs)) (delete pred? (cdr xs)))
        (else (cons (car xs) (delete pred? (cdr xs))))))
`````````

(define (polynom cfs x)
  (if (null? cfs)
      0
      (+ (car cfs) (* x(polynom (cdr cfs) x)))))
``````````````````


(define (intersperse e xs)
  (cond ((null? xs) '())
        ((null? (cdr xs)) xs)
        (else (cons (car xs)
                    (cons e
                          (intersperse e ((cdr xs))))))))
Из файла
Попытка 22.09.2026 13:53:04⏱. Черновик: тесты не выполняются
Попытка 22.09.2026 13:52:53⏱. Черновик: тесты не выполняются
Попытка 22.09.2026 12:43:22. Системное сообщение


Переписка по заданию (0 сообщений)
Web-интерфейс разработан студентами кафедры