Главная / Программирование /
Функциональное программирование / Тест 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