игра брюс 2048
Главная / Программирование / Функциональное программирование / Тест 20

Функциональное программирование - тест 20

Упражнение 1:
Номер 1
 Как определяются значения логического типа при формальном построении языка функционального программирования?
 

Ответ:

 (1) true = 1; false = 0 

 (2) true = λx.λy.x ; false = λx.λy.y  

 (3) true = λx.λy.xy ; false = λx.λy.yx 

 (4) как атомарные константы T и F 


Номер 2
 При введении списков, как определяется функция отделения первого элемента hd?
 

Ответ:

 (1) hd = λx.x true 

 (2) hd cons x y = x 

 (3) hd = λh.λt.λs.s h t 

 (4) hd x = x false 


Номер 3
 Как представляется число n в виде нумерала Черча?
 

Ответ:

 (1) n →​ λf.λx.fxn 

 (2) n →​ λf.λx.fnx 

 (3) как список из n элементов 

 (4) как список из n+1-го пустого списка 


Упражнение 2:
Номер 1
 Как определяется конструкция let?
 

Ответ:

 (1) let x=e1 in e2 => (λx.e2)e1 

 (2) let x=e1 in e2 => (λx.e1)e2 

 (3) let x=e1 in e2 => (λf.[x/f]e2)e1 

 (4) Y(λf.[x/f]e1) e2 


Номер 2
 Как определяется конструкция letrec?
 

Ответ:

 (1) letrec x=e1 in e2 => (λx.e2)e1 

 (2) letrec x=e1 in e2 => (λx.e1)e2 

 (3) letrec x=e1 in e2 => (λf.[x/f]e1)e2 

 (4) с помощью комбинатора неподвижной точки Y 


Упражнение 3:
Номер 1
 Что такое замыкание?
 

Ответ:

 (1) фрагмент программы, в котором данная переменная имеет область видимости 

 (2) лексическая область видимости имени 

 (3) функция с некоторым контекстом вычислений, сохраненным на момент определения функции 

 (4) функция с некоторым текущим контекстом вычислений 


Номер 2
 Пусть геометрическое преобразование определяется функцией трансляции координат int*int →​ int*int. Мы хотим определить функцию сдвига translate : int*int, которая возвращался бы замыкание. Как это сделать?
 

Ответ:

 (1) let translate (dx,dy) = fun (x,y) →​ (x+dx, y+dy) 

 (2) let translate dx dy = function x →​ function y →​ (x+dx, y+dy) 

 (3) let translate (dx,dy) = closure { fun (x,y) →​ (x+dx, y+dy) } 

 (4) let translate dx dy = function (x,y) →​ closure (x+dx, y+dy) 


Номер 3
 Можно ли в F# изменять контекст вычисления функции внутри замыкания?
 

Ответ:

 (1) нет 

 (2) да, если внутри создаются локальные переменные, описанные как mutable 

 (3) да, если внутри создаются ссылочные объекты ref 

 (4) да, если при компиляции включена опция позднего связывания 


Упражнение 4:
Номер 1
 Пусть L – генератор последовательности длины n. Какова сложность операции map f L?
 

Ответ:

 (1) O(1) 

 (2) O(n) 

 (3) O(log n) 

 (4) O(n2) 


Номер 2
 Возможно ли в F# использовать ленивые вычисления?
 

Ответ:

 (1) нет, F# - энергичный язык 

 (2) да, используя конструкции Lazy/Force 

 (3) да, используя последовательности seq 

 (4) да, используя ключи компилятора 


Номер 3
 Что такое мемоизация?
 

Ответ:

 (1) запоминание значений контекста вычислений при формировании замыкания 

 (2) использование заранее вычисленной таблицы значений функции для ускорения вычислений 

 (3) запоминание результатов вычисления функции при ленивых вычислениях 

 (4) запоминание результатов вычисления функции как при ленивых, так и при энергичных вычислениях 




Главная / Программирование / Функциональное программирование / Тест 20