игра брюс 2048
Главная / Программирование / Стили и методы программирования / Тест 8

Стили и методы программирования - тест 8

Упражнение 1:
Номер 1
        	Пусть у нас имеется выражение языка LISP 
        	
        		(quote (f a b (g c d)))
        	
        	Что произойдет при его раскрытии?

Ответ:

 (1) исчезнет наружный список с quote 

 (2) вычислится лишь значение функции g от аргументов c и d, наружный список исчезнет, а в среднем изменится лишь последний член 

 (3) ничего не изменится 

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

 (5) подставятся конкретные значения атомов g, c, d, исчезнет quote 


Номер 2
        	Пусть у нас имеется выражение языка LISP
         	
         		(list f a b (g c d))
         	
         	Что произойдет при его раскрытии?

Ответ:

 (1) исчезнет list в наружном списке 

 (2) вычислится значение функции g от аргументов c и d, и list исчезнет 

 (3) ничего не изменится 

 (4) подставятся конкретные значения всех атомов, кроме g, вычислится значение функции g от аргументов c и d, исчезнет list 

 (5) подставятся конкретные значения атомов a, b, f, исчезнет list, а также quote с окружающими ее скобками 


Номер 3
        	Пусть у нас имеется выражение языка LISP
        	
        		(list f a b (quote (g c d)))
        	
        	Что произойдет при его раскрытии?

Ответ:

 (1) исчезнет list в наружном списке 

 (2) вычислится значение функции g от аргументов c и d, и list исчезнет 

 (3) ничего не изменится 

 (4) подставятся конкретные значения атомов a, b, f, вычислится значение функции g от аргументов c и d, исчезнет list, а также quote с окружающими ее скобками 

 (5) подставятся конкретные значения атомов a, b, f, исчезнет list, а также quote с окружающими ее скобками 


Упражнение 2:
Номер 1
Как установить значение атрибута price атома phone?

Ответ:

 (1) (setf (get 'price 'phone) (125 bucks)) 

 (2) (setf (get 'price 'phone) ('125 'bucks)) 

 (3) (setf (get 'phone 'price) (125 bucks)) 

 (4) (setf (get 'phone 'price) '(125 bucks)) 

 (5) (setf (get 'phone 'price) ('125 'bucks)) 

 (6) (setq (phone price) ('125 'bucks)) 

 (7) (setq (phone price) '(125 bucks)) 


Номер 2
Как присвоить значение атрибута price атома phone атому payment?

Ответ:

 (1) (setq payment (get 'price 'phone)) 

 (2) (setq 'payment (get price phone)) 

 (3) (setq payment (get 'phone 'price)) 

 (4) (setq 'payment (get phone price)) 

 (5) (setq payment (get phone price)) 

 (6) (setq payment (125 bucks)) 


Номер 3
Как присвоить значение атрибута price атома phone атрибуту payment атома customer?

Ответ:

 (1) (progn (setq x (get 'price 'phone)) (setf (get 'customer 'payment) x)) 

 (2) (setq (get 'customer 'payment) (get 'phone 'price)) 

 (3) (setf (get 'customer 'payment) (get 'phone 'price)) 

 (4) (setf customer->payment (get 'phone 'price)) 

 (5) (setq customer->payment (get 'phone 'price)) 

 (6) (setq customer->payment phone->price) 

 (7) (with phone (with customer (setq payment price))) 


Упражнение 3:
Номер 1
Чем отличается setq от let?

Ответ:

 (1) ничем, только второе употребляется лишь в начале блока 

 (2) let изменяет значение переменной локально, до выхода из данного блока, а setq глобально 

 (3) let задает локальные переменные блока 

 (4) setq задает значение лишь одной переменной, а let сразу многих 


Номер 2
Чем отличается присваивание атрибуту от присваивания значению?

Ответ:

 (1) ничем 

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

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

 (4) тем, что для первого используется setq, а для второго setf 


Номер 3
Чем отличается присваивание атрибуту от присваивания значению?

Ответ:

 (1) ничем 

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

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

 (4) тем, что для первого используется setq, а для второго setf 




Главная / Программирование / Стили и методы программирования / Тест 8