Тема 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



Last modified: Sunday, 15 November 2015, 8:24 AM