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

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

Упражнение 1:
Номер 1
 В динамических языках программирования:
 

Ответ:

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

 (2) тип переменной определяется в начале выполнения программы и остается неизменным в процессе выполнения 

 (3) тип переменной определяется в процессе выполнения программы и может меняться 

 (4) переменная всегда имеет строковый тип, но ее значения могут интерпретироваться по-разному 


Номер 2
 При статическом контроле типов:
 

Ответ:

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

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

 (3) возможно построить более богатую систему типов по сравнению с динамическим 

 (4) возможно устранять большее количество ошибок на этапе компиляции 


Номер 3
 Зачем в F# необходимо статически ассоциировать типы с именами?
 

Ответ:

 (1) компилятору необходимо знать, сколько памяти выделять под объект 

 (2) это обеспечивает дополнительный контроль программы на этапе компиляции 

 (3) это обеспечивает дополнительный контроль программы на этапе выполнения 

 (4) это позволяет правильно форматировать строковое представление объекта при печати и преобразовании в строку (ToString()) 


Упражнение 2:
Номер 1
 Какое множество значений у прямой суммы T1+T2?
 

Ответ:

 (1) множество пар <x,y> : x T1, y ∈T2 

 (2) объединение множеств T1∪T2 

 (3) помеченное объединение { <o,x> | x ∈T1 } ∪ { <1,y> | y ∈T2 } 

 (4) множество T1∪T2\(T1ЗT2) 


Номер 2
 Какое множество значений у типа T1 →​ Т2?
 

Ответ:

 (1) множество всех функций из T1 в T2 

 (2) множество всех непрерывных функций из T1 в T2 

 (3) множество всех функций из T1 в T2, дополненное элементом nil 

 (4) множество всех функций из T1 в T2, дополненное элементом ^ 


Номер 3
 Как определяется множество значений для типа, описанного как type tree = {nil} + int X treeX tree?
 

Ответ:

 (1) как решение доменного уравнения D = { nil } + int XDXD 

 (2) как неподвижная точка функции it.nil+x*t*t 

 (3) как множество троек <i,l,r>, i∈Int, l,r∈ tree 


Упражнение 3:
Номер 1
 Какой будет наиболее общий тип для функции tl: let tl x::t = t?
 

Ответ:

 (1) ‘a list →​ ‘a list 

 (2) list →​ list 

 (3) int list →​ int list 

 (4) ‘a list →​ ‘a 


Номер 2
 Что необходимо сделать для вывода типов в некотором выражении?
 

Ответ:

 (1) проверить, что реальные типы всех имен, входящих в выражение, соответствуют указанным 

 (2) проверить, что реальные типы всех подвыражений соответствуют указанным 

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


Номер 3
 Алгоритм вывода типов W содержит в себе следующие основные этапы:
 

Ответ:

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

 (2) генерация множества исходных уравнений, перебор всех возможных подстановок 

 (3) унификация типов имен и функций, генерация решения 

 (4) унификация наиболее общих типов, генерация подстановок 


Номер 4
Система вывода типов (Хиндли-Милнера) – это:
 

Ответ:

 (1) множество типовых уравнений типов для стандартных функций (map, fold, …) 

 (2) формальная аксиоматическая система для вывода типовых заключений 

 (3) система уравнений для типов базовых конструкций языка (let, if-then-else и др.) 


Упражнение 4:
Номер 1
 Что такое операционная семантика языка программирования?
 

Ответ:

 (1) описание семантики языка в терминах изменения состояний или сведением конструкций языка в более примитивной абстрактной машине 

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

 (3) описание того, как некоторые свойства меняются в процессе применения конструкций языка 


Номер 2
 Что такое денотационная семантика языка программирования?
 

Ответ:

 (1) описание семантики языка в терминах изменения состояний или сведением конструкций языка в более примитивной абстрактной машине 

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

 (3) описание того, как некоторые свойства меняются в процессе применения конструкций языка 


Номер 3
 Что такое пропозициональная семантика языка программирования?
 

Ответ:

 (1) описание семантики языка в терминах изменения состояний или сведением конструкций языка в более примитивной абстрактной машине 

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

 (3) описание того, как некоторые свойства меняются в процессе применения конструкций языка 


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

Ответ:

 (1) произвольные множества, на которых определяются значения λ-выражений 

 (2) полные множества, на которых определяются значения λ-выражений 

 (3) частично-упорядоченные множества, на которых определяются значения λ-выражений 

 (4) полные частично-упорядоченные множества, на которых определяются значения λ-выражений 


Номер 2
 Как определяется наименьшая неподвижная точка непрерывной функции f в соответствии с теоремой о неподвижной точке?
 

Ответ:

 (1) fix f = =∪ifi(⊥) 

 (2) fix f =∪ifi(Ø) 

 (3) fix f = Зifi(⊥) 

 (4) fix f =Зifi(Ø) 


Номер 3
 Какая функция, определенная на домене D, обязательно имеет неподвижную точку?
 

Ответ:

 (1) непрерывная 

 (2) монотонная 

 (3) произвольная 

 (4) целочисленная 


Номер 4
Как определяется семантика рекурсивных функций?
 

Ответ:

 (1) сведением к циклу 

 (2) как неподвижная точка некоторой порождающей функции 

 (3) как и любого другого лямбда-выражения 


Упражнение 6:
Номер 1
 Неразрешимость проблемы остановки означает:
 

Ответ:

 (1) невозможность построения программы, которая по произвольному алгоритму и входным данных определит, остановится ли он или нет 

 (2) невозможность построения программы, которая будет останавливаться на определенных входных данных и зацикливаться на других 

 (3) невозможность построения программы, которая по некоторой программе будет определять возможные случаи зацикливания 


Номер 2
 Возможно ли построить автоматический верификатор произвольных функциональных программ на зацикливаемость?
 

Ответ:

 (1) да, поскольку функциональные программы имеют четкие математические денотаты 

 (2) да, поскольку чистое лямбда-исчисление является полным 

 (3) нет, поскольку невозможно учесть побочные эффекты 

 (4) нет, поскольку проблема самоприменимости неразрешима 


Номер 3
 Почему проще формулировать и доказывать корректность программ на чистом функциональном языке?
 

Ответ:

 (1) потому что отсутствие циклов снимает проблему остановки 

 (2) потому что чистое лямбда-исчисление является полным 

 (3) из-за отсутствия побочных эффектов 

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




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