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

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

Упражнение 1:
Номер 1
 Какого типа выражение <@@ (1+2)*3 @@>?
 

Ответ:

 (1) int 

 (2) int →​ int 

 (3) unit →​ int 

 (4) Expr 


Номер 2
 Что означает запись <@ fun x→​ x*2 @>?
 

Ответ:

 (1) создается отложенное вычисление для вычисления функции x*2 

 (2) создается дерево выражения, описывающего функцию удвоения 

 (3) в данном случае запись эквивалентна fun x →​ x*2 


Номер 3
 В чем разница между записями <@ fun x→​ x*2 @> и fun x→​ <@ x*2 @>?
 

Ответ:

 (1) первая запись допустима, вторая – нет 

 (2) вторая запись допустима, первая – нет 

 (3) нет разницы 

 (4) в первом случае создается дерево лямбда-выражения, во втором – функция, которая по заданному x возвращает дерево умножения его на 2 


Номер 4
В чем разница между записями <@ fun x→​ x*2 @> и <@@ fun x→​x*2 @@>?
 

Ответ:

 (1) нет разницы 

 (2) в первом случае производится контроль типов и возвращается типизированное дерево, во втором – безтиповое 

 (3) в первом случае используются энергичные вычисления, во втором – ленивые 

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


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

Ответ:

 (1) Механизм реализации ввода-вывода в функциональных языках 

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

 (3) полиморфный монадический тип, для которого определены операции return и bind 

 (4) полиморфный монадический тип, для которого определены операции return и bind, обладающие определенными свойствами 


Номер 2
 Укажите правильное монадическое свойство:
 

Ответ:

 (1) return x >>= f є f x 

 (2) return x >>= f є x f 

 (3) return (f x) >>= g є f(g x) 

 (4) (return x >>= f) є return (x>>=f) 


Номер 3
 Укажите правильное монадическое свойство:
 

Ответ:

 (1) m >>= return m є m 

 (2) f >>= return m є f m  

 (3) f >>= return m є m f  

 (4) m >>= return є m 


Упражнение 3:
Номер 1
 Чему равен результат выражения nondet { return 10; } для монады недетерминированных вычислений?
 

Ответ:

 (1) 10 

 (2) [10] 

 (3) Nondet(10) 

 (4) Nondet<10> 


Номер 2
 Какого типа выражение async { return 10; }?
 

Ответ:

 (1) int  

 (2) unit →​ int 

 (3) Async 

 (4) Async<int> 


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

Ответ:

 (1) async { fib 100; } 

 (2) async { return (fib 100); } 

 (3) return async { fib 100 } 

 (4) async(fib 100) 


Упражнение 4:
Номер 1
 Как правильно параллельно вычислить сумму 100-го и 200-го чисел Фибоначчи? 
 

Ответ:

 (1) sum(Async.RunSynchronously(Async.Parallel([async { return (fib 100) }, async { return (fib 200) }]))) 

 (2) Async.RunSynchronously(sum(Async.Parallel([async { return (fib 100) }, async { return (fib 200) }]))) 

 (3) Async.Parallel((fib 100)+(fib 200)) 

 (4) Async.Parallel(async { return (fib 100) + (fib 200) }) 


Номер 2
 Сколько потоков выполнения операционной системы будет порождаться при выполнении операции Async.RunSynchronously(Async.Parallel([ for i in 1..100 →​ async { return fib(i) }]))?
 

Ответ:

 (1) один 

 (2) менее 100 

 (3) 100 

 (4) 200 


Номер 3
 Какие ошибки содержаться в приведенном фрагменте кода?
1 let ProcessImageAsync () =
2   async { let inStream  = File.OpenRead(sprintf "Image%d.tmp" i)
3     let pixels    = inStream.ReadAsync(numPixels)
4     let  pixels'   = TransformImage(pixels,i)
5     let  outStream = File.OpenWrite(sprintf "Image%d.done" i)
6     do  outStream.WriteAsync(pixels') }
 

Ответ:

 (1) в строке 2 отсутствует восклицательный знак после let 

 (2) в строке 3 отсутствует восклицательный знак после let 

 (3) в строке 4 отсутствует восклицательный знак после let 

 (4) в строке 5 отсутствует восклицательный знак после let 

 (5) в строке 6 отсутствует восклицательный знак после do  




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