Учебная практика 36-й группы

Ознакомьтесь с языком Common Lisp: история создания, синтаксис, основные операции. Можно воспользоваться, например, следующей литературой:

Выполните четыре общих упражнения:

  1. Написать функцию diff, вычисляющую производную простого полинома. Примеры запуска программы (во всех примерах ниже для краткости пропущен вызов print):
    • (diff '(+ x (* 3 x)) 'x). Ответ: ( + 1 (+ (* 0 x) (* 1 3)))
    • (diff '(- x (* 3 x)) 'x). Ответ: (- x (* 3 x))
    • (diff '(* x ( + x 1)) 'x). Ответ: (+ (* 1 (+ x 1))(*(+ 1 0) x))
  2. Написать функцию len, вычисляющую длину списка. Примеры запуска программы:
    • (len '(x y z)). Ответ: 3
    • (len ()). Ответ: 0
  3. Написать функцию lst, возвращающую последний элемент списка. Использовать встроенную фунцию last нельзя. Примеры запуска программы:
    • (lst '(x y z)). Ответ: z
    • (lst ()). Ответ: NIL
  4. Написать функцию gcd, возвращающую НОД двух чисел. Примеры запуска программы:
    • (gcd 5 10). Ответ: 5
    • (gcd 7 19). Ответ: 1

а также два индивидуальных (для решения можно/нужно создавать дополнительные вспомогательные функции; также можно предполагать, что функция всегда получает корректные входные данные):

ФИО Задача 1 Задача 2
Баранов К.С.Напишите функцию, которая переворачивает список задом наперед.Напишите функцию, которая транспонирует матрицу. При решении упражнения вы можете пользоваться функцией из упр. 2, написанной Краав А.В.
Барыкин М.М.Напишите функцию, которая определяет, является ли список палиндромом.Напишите функцию, которая определяет, является ли число совершенным. Число является совершенным, если сумма всех его собственных делителей равна самому числу: 6 = 1 + 2 + 3.
Иванов М.А.Напишите функцию, которая дублирует элементы списка.
(dub '(x y z)). Ответ: (x x y y z z)
Напишите функцию, которая выводит список всех простых делителей заданного числа.
Коваленко А.Л.Напишите функцию, которая делает срез списка. Принимает на вход список и два числа I < K и возвращает элементы списка с I-го по K-й включительно.
(slice '(6 1 2 7 34 5 9) 2 5). Ответ: (1 2 7 34)
Напишите функцию, которая вычисляет скалярное произведение двух векторов.
Краав А.В.Напишите функцию, которая удаляет K-й элемент из списка.Напишите функцию, которая выводит N-й столбец матрицы.
Кропин Н.А.Напишите функцию, которая выводит все элементы, записанные в узлах бинарного дерева, в порядке инфиксного правого обхода. Формат представления бинарного дерева: пустое дерево - (), дерево - (атом поддерево1 поддерево2).
(leftprint '(2 (4()(1()())) (5()())). Ответ: (4 1 2 5)
Напишите функцию, которая выводит список всех делителей заданного числа.
Меженцева А.А.Напишите функцию, которая, получив на вход два числа N и M, возвращает список со всеми целыми числами из отрезка [N,M].Напишите функцию, которая выводит список всех простых множителей заданного числа.
Морозов А.П.Напишите функцию, которая удаляет из списка все вхождения заданного элемента.
(remel '(6 1 2 7 1 5 9) 1). Ответ: (6 2 7 5 9)
Напишите функцию, которая определяет, является ли список чисел знакопеременным, т.е. каждое следующее число имеет знак, противоположный предшествующему. Можно предполагать, что в списке нет нулей.
Попков А.А.Напишите функцию, которая меняет знак всех чисел в списке на противоположный.Напишите функцию, которая находит минимальный элемент списка.
Смирнова К.А.Напишите функцию, которая раскрывает все скобки в списке.
(slice '(7 8 (1 4 (5)) 1 (2 3))). Ответ: (7 8 1 4 5 1 2 3)
Напишите функцию, которая находит максимальный элемент списка.
Спирицева П.И.Напишите функцию, которая проверяет, что список задает бинарное дерево. Формат представления бинарного дерева: пустое дерево - (), дерево - (атом поддерево1 поддерево2).
(isbinary '(2 (4()(1()())) (5()())). Ответ: T
Напишите функцию, которая определяет, является ли число простым.
Федорова О.Е.Напишите функцию, которой определяет высоту бинарного дерева, которое подается на вход в виде списка. Формат представления бинарного дерева: пустое дерево - (), дерево - (атом поддерево1 поддерево2).
(binheight '(2 (4()(1()())) (5()())). Ответ: 3
Напишите функцию, которая определяет, являются ли два числа взаимно-простыми.
Черемухин С.А.Напишите функцию, которая возвращает крону двоичного дерева, подаваемого на вход в виде списка. Формат представления бинарного дерева: пустое дерево - (), дерево - (атом поддерево1 поддерево2).
(btcrown '(2 (4()(1()())) (5()())). Ответ: (1 5)
Напишите функцию, вычисляющую факториал числа N.

Ознакомьтесь с идеями, принципом работы, реализацией на Lisp и на любом императивном языке на ваш выбор следующих концепций, пришедших из языка Lisp:

Выполните два творческих упражнения на двух языках: Common Lisp и любом императивном языке на ваш выбор - приведите примеры кода, демонстрирующие работу с:

  1. лямбда-функциями,
  2. функциями высшего порядка.

Всего должно быть представлено четыре фрагмента кода, даже если в одном фрагменте кода будут продемонстрированы одновременно обе концепции. Примеры должны отличаться от тех, что были разобраны на занятии.

Также выполните два индивидуальных задания на любом императивном языке на ваш выбор (писать код на языке Common Lisp для данных упражнений не надо):

ФИО map/reduce Замыкания
Баранов К.С.Дан список целых чисел. С помощью map отобразите его в список квадратов соответствующих чисел.
[2 9 -4 6 -2] => [4 81 16 36 4]
С помощью замыкания напишите генератор чисел Фибоначчи.
func = genFib(); func(); func(); func(); Ответ: 1 1 2
Барыкин М.М.Дан список целых чисел. С помощью map отобразите его в список нулей и единиц, где 1 означает, что соответствующее число в исходном списке нечетное, а 0 - четное.
[2 9 -4 6 -2] => [0 1 0 0 0]
С помощью замыкания напишите генератор простых чисел.
func = genPrime(); func(); func(); func(); Ответ: 1 3 5
Иванов М.А.Дан список целых чисел. С помощью map отобразите его в список чисел с инвертированным знаком.
[2 9 -4 6 -2] => [-2 -9 4 -6 2]
С помощью замыкания напишите генератор степеней числа N.
N=3; func = genPow(N); func(); func(); func(); Ответ: 3 9 27
Коваленко А.Л.Дан список целых чисел. С помощью map отобразите его в список, в котором все числа, кратные некоторому заданому N, обнулены.
[2 9 -4 6 -2], N=3 => [2 0 -4 0 -2]
С помощью замыкания напишите генератор делителей заданного числа N.
N = 9; func = genDivisors(N); func(); func(); func(); func(); func(); Ответ: 1 3 9 0 0
Краав А.В.Дан список целых чисел. С помощью reduce перемножьте все числа в нем.
[2 9 -4 6 -2] => 864
С помощью замыкания напишите генератор чисел, взаимно простых к заданному числу N.
N = 8; func = genPr(N); func(); func(); func(); func(); Ответ: 1 3 5 7
Кропин Н.А.Дан список слов. С помощью map отобразите его в список, в котором все слова переведены в верхний регистр.
["Hello" "world"] => ["HELLO" "WORLD"]
С помощью замыкания напишите генератор очередного простого числа из заданного списка.
lst = [3 9 8 7 2]; func = genPrElem(lst); func(); func(); func(); func(); Ответ: 3 7 0 0
Меженцева А.А.Дан список целых чисел. С помощью map отобразите его в список, в котором будет -1, если соответствующее число отрицательное, 0 - если равно нулю и 1, если положительное.
[2 9 -4 6 -2], N=3 => [1 1 -1 1 -1]
С помощью замыкания напишите генератор элементов арифметической прогрессии с заданными a1 и d.
a1 = 1; d = 3; func = genArProg(a1,d); func(); func(); func(); Ответ: 1 4 7
Морозов А.П.Дан список целых чисел. С помощью map отобразите его в список, в котором все числа, кратные некоторому заданому N, поделены на N.
[2 9 -4 6 -2], N=3 => [2 3 -4 2 -2]
С помощью замыкания напишите генератор элементов геометрической прогрессии с заданными b1 и q.
b1 = 2; q = 3; func = genGeoProg(b1,q); func(); func(); func(); Ответ: 2 6 18
Попков А.А.Дан список слов. С помощью reduce подсчитайте количество гласных во всех словах (алфавит - латиница).
["Hello" "World"] => 3
С помощью замыкания напишите генератор элементов по следующему алгоритму, начинающему с некоторого заданного N: если N четное число, то N = N / 2, иначе N = 3N+1.
N = 5; func = gen3nplus1(N); func(); func(); func(); Ответ: 5 16 8
Смирнова К.А.Дан список целых чисел. С помощью reduce подсчитайте количество четных чисел в нем.
[2 9 -4 6 -2] => 4
С помощью замыкания напишите генератор последовательности элементов от заданных N до M
N = 3; M = 5; func = genSeq(N,M); func(); func(); func(); func(); Ответ: 3 4 5 3
Спирицева П.И.Дан список целых чисел. С помощью reduce подсчитайте количество отрицательных чисел в нем.
[2 9 -4 6 -2] => 2
С помощью замыкания напишите генератор простых множителей заданного числа N.
N = 10; func = genPrDiv(N); func(); func(); func(); func(); Ответ: 2 5 1 1
Федорова О.Е.Дан список целых чисел. С помощью map отобразите его в список с остатками от деления соответствующих чисел на некоторое заданное N.
[2 9 4 6 2], N=3 => [2 0 1 0 2]
С помощью замыкания напишите генератор разрядов бинарного представления заданного числа N от младших к старшим.
N = 10; func = genBin(N); func(); func(); func(); func(); Ответ: 0 1 0 1
Черемухин С.А.Дан список целых чисел. С помощью map отобразите его в список, в котором находятся результаты применения заданной функции f(x).
[2 9 -4 5 -2], f(x)=2x+1 => [5 19 -7 11 -3]
С помощью замыкания напишите генератор разрядов заданного числа N от младших к старшим.
N = 142; func = genDev(N); func(); func(); func(); func(); Ответ: 2 4 1 0

Код каждого упражнения должен быть оформлен полностью готовым для компиляции. Например, в случае реализации упражнений на языке C++ в коде должны быть заголовочные файлы, необходимые объявления пространств имен, функция main, функция печати результата на экран. Параметры можно задавать вручную в коде.

Оформите результат выполнения обоих заданий в виде отчета. Необходимые элементы Отчета:

Электронный вариант отчета выслать на адрес soldis@yandex.ru. Все возникающие вопросы тоже можно отправлять на этот адрес.

Назад