Лабораторная работа 1
-
Представить следующие списки в виде списочных ячеек:
'(open close halph)
'((TOOL) (call))
'((open1) (close2) (halph3))
'(((TOOL1) (call2)) ((sell)))
'((one) for all (and(me(for you))))
'((TOOL) (call)) ((sell)))
-
Используя только функции CAR и CDR, написать выражения, возвращающие
- второй
- третий
- четвертый элементы заданного списка.
Лабораторная работа 2
-
Что будет в результате вычисления выражений?
(CAADR ' ((blue cube) (red pyramid)))
(CDAR '((abc) (def) (ghi)))
(CADR ' ((abc) (def) (ghi)))
(CADDR ' ((abc) (def) (ghi)))
-
Напишите результат вычисления выражений:
(list 'Fred 'and 'Wilma)
(list 'Fred ' (and Wilma))
(cons Nil Nil)
(cons T Nil)
(cons Nil T)
(list Nil)
(cons ' (T) Nil)
(list ' (one two) ' (free temp))
(cons 'Fred '(and Wilma))
(cons 'Fred '(Wilma))
(list Nil Nil)
(list T Nil)
(list Nil T)
(cons T (list Nil))
(list '(T) Nil)
(cons '(one two) '(free temp))
-
Написать функции
(f arl ar2 ar3 ar4)
, возвращающую список:((arl ar2) (ar3 ar4))
.(f arl ar2)
, возвращающую((arl) (ar2))
.(f arl)
, возвращающую(((arl)))
.
Представить результаты в виде списочных ячеек.
Лабораторная работа 3
-
Составить диаграмму вычисления следующих выражений
(equal 3 (abs - 3))
(equal (+ 1 2) 3)
(equal (* 4 7) 21)
(equal (* 2 3) (+ 7 2))
(equal (- 7 3) (* 3 2))
(equal (abs (- 2 4)) 3))
-
Написать функцию, вычисляющую гипотенузу прямоугольного треугольника по заданным катетам и составить диаграмму её вычисления.
-
Написать функцию, вычисляющую объем параллелепипеда по 3-м его сторонам, и составить диаграмму ее вычисления.
-
Каковы результаты вычисления следующих выражений?
(list 'a c)
(cons'a (b c))
(cons'a '(b c))
(caddy (1 2 3 4 5))
(cons'a'b'c)
(list 'a (b c))
(list a '(b c))
(list (+ 1 '(length '(1 2 3))))
-
Написать функцию
longer_then
от двух списков-аргументов, которая возвращаетТ
, если первый аргумент имеет большую длину. -
Каковы результаты вычисления следующих выражений?
(cons 3 (list 5 6))
(list 3 'from 9 'lives (- 9 3))
(+ (length for 2 too)) (car '(21 22 23)))
(cdr ' (cons is short for ans))
(car (list one two))
(cons 3 '(list 5 6))
(car (list 'one 'two))
Лабораторная работа 4
-
Дана функция
(defun mystery (x) (list (second x) (first x)))
. Какие результаты вычисления следующих выражений?(mystery (one two))
(mystery (last one two))
(mystery free)
(mystery one 'two))
-
Написать функцию, которая переводит температуру в системе Фаренгейта температуру по Цельсию
(defum f-to-c (temp)...)
.
Формулы: c = 5/9*(f-320)
; f= 9/5*c+32.0
.
Как бы назывался роман Р.Брэдбери "+451 по Фаренгейту" в системе по Цельсию?
-
Что получится при вычисления каждого из выражений?
(list 'cons t NIL)
(eval (eval (list 'cons t NIL)))
(apply #cons '(t NIL))
(list 'eval NIL)
(eval (list 'cons t NIL))
(eval NIL)
(eval (list 'eval NIL))
-
Написать функцию, вычисляющую катет по заданной гипотенузе и другому катету прямоугольного треугольника, и составить диаграмму ее вычисления.
-
Написать функцию, вычисляющую площадь трапеции по ее основаниям и высоте, и составить диаграмму ее вычисления.
Лабораторная работа 5
-
Написать функцию, которая принимает целое число и возвращает первое четное число, не меньшее аргумента.
-
Написать функцию, которая принимает число и возвращает число того же знака, но с модулем на 1 больше модуля аргумента.
-
Написать функцию, которая принимает два числа и возвращает список из этих чисел, расположенный по возрастанию.
-
Написать функцию, которая принимает три числа и возвращает Т только тогда, когда первое число расположенно между вторым и третьим.
-
Каков результат вычисления следующих выражений?
(and ’fee ’fie ’foe)
(or nil ’fie ’foe)
(and (equal ’abc ’abc) ’yes)
(or ’fee ’fie ’foe)
(and nil ’fie ’foe)
(or (equal ’abc ’abc) ’yes)
-
Написать предикат, который принимает два числа-аргумента и возвращает Т, если первое число не меньше второго.
-
Какой из следующих двух вариантов предиката ошибочен и почему?
(defun pred1 (x)
(and (numberp x) (plusb x))
)
(defun pred2 (x)
(and (plusp x) (numberp x))
)
- Решить задачу 4, используя для ее решения конструкции IF, COND, AND/OR.
Лабораторная работа 6
Дано два списка: первый список название стран, второй – столиц.
- из двух списков создать список из двухэлементных списков
- из двух списков создать список из точечных пар
По полученным спискам по стране найти столицу и наоборот.
Лабораторная работа 7
-
Чем принципиально отличаются функции cons, lisp, append?
-
Каковы результаты вычисления следующих выражений?
(reverse ())
(last ())
(reverse ’(a))
(last ’(a))
(reverse ’((a b c)))
(last ’((a b c)))
-
Написать два варианта функции, которая возвращает последний элемент своего списка-аргумента.
-
Написать два варианта функции, которая возвращает свой список-аргумент без последнего элемента.
-
Написать простой вариант игры в кости, в котором бросаются две правильные кости. Если сумма выпавших очков равна 7 или 11 – выигрыш, если выпало (1, 1) или (6, 6) – игрок получает право снова бросить кости, во всех остальных случаях ход переходит ко второму игроку, но запоминается сумма выпавших очков. Если второй игрок не выигрывает абсолютно, то выигрывает тот игрок, у которого больше очков. Результат игры и значения выпавших костей выводить на экран с помощью функции print.
Лабораторная работа 8
-
Написать функцию, которая по своему списку-аргументу lst определяет является ли он полиндромом (то есть равны ли lst и (reverse lst)).
-
Напишите функцию swap-first-last, которая переставляет в списке-аргументе первый и последний элементы.
-
Напишите функцию swap-tow-elements, которая переставляет в списке-аргументе два указанных своими порядковыми номерами элемента в этом списке.
-
Напишите две функции, swap-to-left и swap-to-right, которые производят круговую перестановку в списке-аргументе влево и вправо, соотвественно (на k позиций).
-
Напишите функцию, которая умножает на заданное число-аргумент все числа из заданного списка-аргумента, когда
- все элементы списка – числа,
- элементы списка – любые объекты.
-
Напишите функцию, select-between, которая из списка-аргумента, содержащего только числа, выбирает только те, которые расположены между двумя указанными границами-аргументами и возращает их в виде списка (упорядоченного по возрастанию списка чисел).
Лабораторная работа 9
-
Написать предикат set-equal, который возвращает t, если два его множества-аргумента содержат одни и те же элементы, порядок которых не имеет значения.
-
Напишите необходимые функции, которые обрабатывают таблицу из точечных пар: (страна. столица), и возвращают по стране - столицу, а по столице - страну.
-
Напишите функцию, которая умножает на заданное число-аргумент все числа из заданного списка-аргумента, когда
- все элементы списка – числа,
- элементы списка – любые объекты.
-
Напишите функцию, которая уменьшает на 10 все числа из списка аргумента этой функции.
-
Написать функцию, которая возвращает первый аргумент списка-аргумента. который сам является непустым списком.
-
Написать функцию, которая выбирает из заданного списка только те числа, которые больше 1 и меньше 10. (Вариант: между двумя заданными границами.)
-
Написать функцию, вычисляющую декартово произведение двух своих списков-аргументов.
-
Почему так реализовано reduce, в чем причина?
(reduce #’+ ()) -> 0
Лабораторная работа 10
- Пусть list-of-list список, состоящий из списков. Написать функцию, которая вычисляет сумму длин всех элементов list-of-list.
- Написать рекурсивную версию (с именем reg-add) вычисления суммы чисел заданного списка.
- Написать рекурсивную версию с именем recnth функции nth.
- Написать рекурсивную функцию alloddr, которая возвращает t когда все элементы списка нечетные.
- Написать рекурсивную функцию, относящуюся к хвостовой рекурсии с одним тестом завершения, которая возвращает последний элемент списка-аргумента.
- Написать рекурсивную функцию, относящуюся к дополняемой рекурсии с одним тестом завершения, которая вычисляет сумму всех чисел от 0 до n-ого аргумента функции.
- Написать рекурсивную функцию, которая возвращает последнее нечетное число из числового списка, возможно создавая некоторые вспомогательные функции.
- Используя cons-дополняемую рекурсию с одним тестом завершения, написать функцию которая получает как аргумент список чисел, а возвращает список квадратов этих чисел в том же порядке.
- Написать функцию с именем select-odd, которая из заданного списка выбирает все нечетные числа. (Вариант 1: select-even, вариант 2: вычисляет сумму всех нечетных чисел(sum-all-odd) или сумму всех четных чисел (sum-all-even) из заданного списка.)