Главная / Программирование /
Основы функционального программирования / Тест 12
Основы функционального программирования - тест 12
Упражнение 1:
Номер 1
Какая из перечисленных форм содержит подвыражения, которые можно не вычислять, т.к. их значения не влияют на результат?
Ответ:
 (1) (car(cons 1 (cons 2 3))) 
 (2) (cons 1 (cons 2 3)) 
 (3) (cond (x (cons 'A x)) (y (cons 1 (cons 2 y)) )) 
Номер 2
Какая из перечисленных форм содержит подвыражения, которые можно не вычислять, т.к. на результат их значения не влияют?
Ответ:
 (1) (cons 'A (car(cons 'A (cons 'B 'C)))) 
 (2) (cons 1 (cons 2 3)) 
 (3) (cond (x (cons 'A x)) (y (cons 1 (cons 2 y)) )) 
Номер 3
Какая из перечисленных форм содержит подвыражения, которые можно не вычислять, т.к. результат от их значения не зависит?
Ответ:
 (1) (cond (T (cons 'A x)))((cons 1 (cons 2 y)) )) 
 (2) (cons 1 (cons 2 3)) 
 (3) (cond (x (cons 'A x)) (y (cons 1 (cons 2 y)) )) 
Упражнение 2:
Номер 1
В какой из перечисленных форм все подвыражения необходимо вычислить?
Ответ:
 (1) (car(cons 1 (cons 2 3))) 
 (2) (eq 'A (car(cons 'A (cons 'B 'C)))) 
 (3) (cons 1 (cons 2 3)) 
Номер 2
В какой из перечисленных форм вычисление всех подвыражений необходимо?
Ответ:
 (1) (car(cons 1 (cons 2 3))) 
 (2) (eq 'A (car(cons 'A (cons 'B 'C)))) 
 (3) (print (cons 'A (cons 'B 'C))) 
 (4) (cond (T Nil)(x (car(cons 'A 'B)))(y (cons 1 (cons 2 3)))) 
Номер 3
В какой из перечисленных форм вычисление всех подвыражений для получения результата обязательно?
Ответ:
 (1) (eq 'A (car(cons 'A (cons 'B 'C)))) 
 (2) (cond (T Nil) (x (car(cons 'A 'B)))(y (cons 1 (cons 2 3)))) 
 (3) (cond (T(car(cons 'A 'B)))((cons 1 (cons 2 3))T)) 
 (4) (+ 5 (* 2 3)) 
 (5) (atom (cons 'A (cons 'B 'C))) 
Упражнение 3:
Номер 1
В какой из перечисленных форм необходимость вычислять все подвыражения зависит от значений переменных?
Ответ:
 (1) (car(cons 1 (cons x y))) 
 (2) (car(cons x (cons 'B 'C))) 
 (3) (cond (x (car(cons 'A 'B)))(T Nil)) 
Номер 2
Какая из форм содержит константные выражения, которые можно заменить их значениями?
Ответ:
 (1) (car(cons 1 (cons x 3))) 
 (2) (eq 'A (car(cons x (cons 'B y)))) 
 (3) (cond (T(car(cons 'A 'B)))((cons 1 (cons 2 3)))) 
 (4) (cond (x (car(cons 'A 'B)))(T (cons 1 (cons 2 3)))) 
Номер 3
Какая из форм содержит общие подвыражения, которые целесообразно вычислить предварительно, чтобы избежать повторного вычисления одних и тех же выражений?
Ответ:
 (1) (car(cons 1 (cons x 1))) 
 (2) (cons 'A (car(cons x (cons 'A x)))) 
 (3) (list 1 (cons 2 x) 2 (cons 2 x) 3 (cons 2 x) 
 (4) (cond (x (car(cons 'A 'B)))(T (cons 1 (cons 2 3)))) 
Упражнение 4:
Номер 1
Какая из форм не содержит константных подвыражений?
Ответ:
 (1) (car(cons 1 (cons x 3))) 
 (2) (cons 1 (cons 2 3)) 
 (3) (cond (x (car(cons 'A 'B)))(T (cons 1 (cons 2 3)))) 
Номер 2
Какая из форм не содержит подвыражений, допускающих замену на их значения?
Ответ:
 (1) (cons 'A (car(cons x (cons 'B y)))) 
 (2) (cond (x (car(cons 'A 'B)))(T (cons 1 (cons 2 3)))) 
 (3) (cons 1 (cons 2 3)) 
Номер 3
В какой из форм нет константных подвыражений?
Ответ:
 (1) (cond (T(car(cons x 'A )))((cons 1 (cons 3 y))T)) 
 (2) (cons 1 (cons 2 3)) 
 (3) (cond (x (car(cons 'A 'B)))(T (cons 1 (cons 2 3)))) 
Упражнение 5:
Номер 1
В какой из перечисленных форм возможность не вычислять все подвыражения не зависит от значений переменных?
Ответ:
 (1) (cond (nil (car(cons x (cons 2 3))) )) 
 (2) (cond (T (cons 'A (cons x (cons 'B y)))) 
 (3) (cond (x (cons x (cons 2 y)))) 
Номер 2
В какой из перечисленных форм можно вычислять не все подвыражения независимо от значений переменных?
Ответ:
 (1) (cond (cons 'A (car(cons x y)) ) (cons 'one x) ) (T (cons 'two y)) ) 
 (2) (cond (T(car(cons 'A 'B)))((cons x (cons 2 3))T)) 
 (3) (cond (x (cons x (cons 2 3)))) 
Номер 3
Какая из перечисленных форм допускает вычисление не всех подвыражений?
Ответ:
 (1) (cond (x (cons x (cons 2 3)))) 
 (2) (cond (T (cons 'A (cons x (cons 'B y)))) 
 (3) (cond (x (car(cons 'A 'B))) (T (cons 1 (cons 2 3)))) 
Упражнение 6:
Номер 1
Вычисление какой подформулы может происходить не при каждом исполнении общей формулы?
Ответ:
 (1) параметры обычных функций 
 (2) параметры специальных функций, например, операторы в форме prog 
 (3) самые левые предикаты в ветвлениях 
Номер 2
Вычисление какой подформулы не гарантировано при исполнении общей формулы?
Ответ:
 (1) параметры обычных функций 
 (2) произвольное число аргументов функции LIST 
 (3) предикаты в ветвлениях 
Номер 3
Вычисление какой подформулы может происходить или не происходить при исполнении общей формулы в зависимости от хода других вычислений?
Ответ:
 (1) параметры обычных функций 
 (2) параметры арифметических мультиопераций 
 (3) параметры логических связок AND и OR 
Упражнение 7:
Номер 1
Вычисление каких подформул не может происходить вообще?
Ответ:
 (1) предикаты в ветвлениях 
 (2) параметры специальных функций 
 (3) непомеченные выражения, расположенные сразу вслед за RETURN в форме PROG 
Номер 2
Вычисление каких подформул вообще невозможно, точнее, бессмысленно?
Ответ:
 (1) параметры внешних функций 
 (2) выражения, зависящие от свободных переменных, значения которых не определены 
 (3) предикаты в ветвлениях 
Номер 3
Вычисление каких подформул не имеет смысла?
Ответ:
 (1) обращения к функциям, которые могут зациклиться 
 (2) ветви условного выражения, соответствующие тождественно ложному предикату 
 (3) выражения, которые предстоит умножить на ноль 
Упражнение 8:
Номер 1
Какие из перечисленных форм содержат подвыражения, которые можно не вычислять?
Ответ:
 (1) (car(cons 1 (cons 2 3))) 
 (2) (cons 'A (car(cons 'A (cons 'B 'C)))) 
 (3) (cond (T(car(cons 'A 'B)))((cons 1 (cons 2 3))T)) 
 (4) (cons 1 (cons 2 3)) 
Номер 2
В каких из перечисленных форм все подвыражения необходимо вычислить?
Ответ:
 (1) (car(cons 1 (cons 2 3))) 
 (2) (cons 'A (car(cons 'A (cons 'B 'C)))) 
 (3) (cond (T(car(cons 'A 'B)))((cons 1 (cons 2 3))T)) 
 (4) (cons 1 (cons 2 3)) 
 (5) (car(cons 'A (cons 'B 'C)) x) 
Номер 3
В каких из перечисленных форм необходимость вычислять те или иные подвыражения зависит от значений переменных?
Ответ:
 (1) (cond ((atom x) (car(cons x (cons 2 3))) ) 
 (2) (cond (T(car(cons 'A 'B)))((cons x (cons 2 3))T)) 
 (3) (cons 1 (cons x 3)) 
 (4) (cond (x (cons 'A x)))(T (cons 1 (cons 2 y)))) 
Упражнение 9:
Номер 1
Вычисление каких конструкций может происходить не при каждом исполнении формулы?
Ответ:
 (1) параметры обычных функций 
 (2) параметры специальных функций 
 (3) ветви условного выражения 
 (4) предикаты в ветвлениях 
Номер 2
Вычисление каких конструкций не может происходить вообще?
Ответ:
 (1) параметры специальных функций 
 (2) ветви условного выражения 
 (3) непомеченные выражения, расположенные сразу вслед за RETURN, GOTO, THROW и т.п. 
Номер 3
Какие средства позволяют программисту оптимизировать Лисп-программы методом "ленивых" вычислений?
Ответ:
 (1) лямбда-конструктор (lambda) 
 (2) блокировка вычислений (quote) 
 (3) открытый доступ к интерпретации (eval, apply, funcall) 
 (4) встроенный компилятор (compile)