Първо контролно

Контролно тайм

На тази страница са задачите от първото контролно по функционално програмиране. Това е, не ми идва нищо остроумно да кажа по темата. Естествено, контролното вече мина, така че целта на тази страница ще е да служи за упражнение на всички, които смятат да ходят на поправка по ФП. Както и за източник на мъдрост и вдъхновение на бъдещите поколения(това само в случай, че механата зад факултета затвори преждевременно, нали).
Задачите бяха седем, задължително е да бъдат решени първите пет, както и една от последните две. И като казвам задължително - само ако искаш да не те скъсат е задължително. Иначе, ако смяташ да преследваш кариера като морско свинче за експериментални лекарства - заповядай, не решавай нищо.

Силно се надявам да не си мислиш, че ако просто запомниш наизуст решенията на тези задачи, ще си вземеш изпита. Тоест, шансът е, че ако искаш да зубриш, ще го вземеш, но няма да си научиш материала и тогава даже всичките шестици на света няма да ти повишат интелектуалното ниво. Моля, първо пробвай да ги решиш без да гледаш отговорите.

Задача 1

Тази е гадна, ще я напиша после. Т.е. тя не е гадна, ама трябва да рисувам, а ме мързи.

Задача 2

Да се дефинира процедура, която без да използва процедури от по-висок ред намира сумата

(1)
\begin{align} \sum_{i=1}^n (-1)^{i-1} \cfrac{i!}{(a+1)(a+2) \cdots (a+i)} \end{align}

Където a и n са дадени естествени числа.

Задача 3

Да се дефинира процедура от по-висок ред (accumulate combinator null-value term start next end) и като се използва, да се дефинира процедура, която по дадени естествено число n и реално число x(x е различно от 0) намира стойността на израза:

(2)
\begin{align} (\sqrt{2} - \cfrac{1}{x} + \cfrac{1}{x^2})(\sqrt{4} - \cfrac{1}{x} + \cfrac{1}{x^2} - \cfrac{1}{x^4}) \cdots (\sqrt{2n} - \cfrac{1}{x} + \cfrac{1}{x^2} - \cfrac{1}{x^4} + \cdots + (-1)^{n+1}\cfrac{1}{x^{2n}}) \end{align}

Тази задача е тъпа, затова преди решението първо ще я наредя:

Задача 4

Даден е списък от точкови двойки от естествени числа $l = ((a_1 . b_1) (a_2 . b_2) \cdots (a_n . b_n))$, за който е известно, че всяко $b_i$ е различно от $b_j$ за $i \ne j$. Да се дефинира функция, построяваща частичната функция f върху естествените числа, дефинирана по следния начин: $f(b_i) = a_i$ за всяко i $(1 \le i le k)$.

Задача 5

Deep list се нарича празният списък () и ако x е число или deep list, а l е deep list, то (cons x l) е deep list. Например (1 (2 (3 4)) (5 6) (7 (8))) e deep list. Нека L1 и L2 са дадени дълбоки списъци. Да се дефинира функция, която намира сечението на множеството от числата в L1 с множеството от числата в L2.

Задача 6

Като се използват функции от по-висок ред за списъци, да се дефинира предикат (fixed? f l), който по дадена функция $f: R \to R$ и списък от списъци от реални числа l проверява дали във всеки от подсписъците на l съществува поне една неподвижна точка за f (x е неподвижна точка за f, ако f(x) = x).
Пример:

(fixed? (lambda (x) (+ (* x x) (- x 1))) '((0 1 -1) (1 -1) (0 -1)))
#t

Е, надявам се, че тази статия ти е била забавна, или поне полезна. Успех на следващото контролно.

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License