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