Примерни задачи за първо контролно
Тема 1
Задача 1.
Да се напише функция (min-sum-digit a b k), която намира най-малкото от
целите числа от a да b, чиято сума на цифрите се дели на k.
Задача 2. Да се напише функция (average f g), която по две числови функции f : R → R и g : R → R намира средно-аритметичната функция \( (f\oplus g)(x) = \frac{f(x)+g(x)}2 \). С помощта на average да се напише функция от по-висок ред (calcprod f n), която намира произведението \( \prod_{i=1}^n (f\oplus g_i)(i) \), където gi(x) = ix. Използването на accumulate е позволено, но не е задължително.
Задача 3. Да се дефинира функция (occurrences l1 l2). l1 и l2 са списъци от числа. Функцията да конструира списък с броя на срещанията на всеки от елементите на l1 в l2.
Пример: (occurrences ‘(1 2 3) ‘( 1 2 4 1 )) -> (2 1 0)
Задача 4. Да се дефинира предикат (match-lenghts? l1 l2). l1 и l2 са непразни списъци от списъци от числа. Ако l1 = (a1 a2 … ak), а l2 = (b1 b2 … bk) , предикатът да връща истина, когато разликите в дължините на всяка двойка съответни списъци ai и bi е еднаква.
Пример:
(match-lengths? ‘( () (1 2) (3 4 5)) ‘( (1) (2 3 4) (5 6 7))) -> #t,
(match-lengths? ‘( () (1 2) (3 4 5)) ‘( () (2 3 4) (5 6 7))) -> #f
Тема 2
Задача 1. Да се напише функция (prod-sum-div a b k), която намира произведението на всички цели числа от a да b, които имат сума на делителите кратна на k.
Задача 2. Да се напише функция (average f g), която по две числови функции f : R → R и g : R → R намира средно-геометричната функция \( (f\otimes g)(x) = \sqrt{f(x)g(x)} \). С помощта на average да се напише функция от по-висок ред (calcsum f n), която намира сумата \( \sum_{i=1}^n(f\otimes g_i)(i) \), където gi(x) = xi. Използването на accumulate е позволено, но не е задължително.
Задача 3. (1.25 т.) Да се дефинира функция (duplicates l1 l2). l1 и l2 са списъци от числа. Функцията построява списъка от тези числа в l1, които се срещат повече от веднъж в l2.
Пример: (duplicates ‘(1 2 3) ‘(1 2 1 3 2)) -> (1 2)
Задача 4. (1.25 т.) Да се дефинира предикат (image? l1 l2). l1 и l2 са непразни списъци с еднакъв брой числа. Ако l1 = (a1 a2 … ak), а l2 = (b1 b2 … bk), предикатът да връща истина, когато съществува такова число x, че ai = x + bi ,за всяко i = 1...k.
Пример:
(image ‘(1 2 3) ‘(4 5 6)) -> #t
(image ‘(1 2 3) (1 2 2 )) -> #f