игра брюс 2048
Главная / Программирование / Введение в программирование на Лиспе / Тест 11

Введение в программирование на Лиспе - тест 11

Упражнение 1:
Номер 1
Какие из приведенных ниже высказываний являются верными:

Ответ:

 (1) метки в prog-форма реализуются с помощью специальной функции label 

 (2) Prog-форма может быть рекурсивной 

 (3) выход из prog-формы происходит при вызове функции return 


Номер 2
Когда могут быть использованы prog-выражения:

Ответ:

 (1) при написании функционально-ориентированых выражений 

 (2) при написании объектно-ориентированого кода 

 (3) при написании программ на Лиспе в императивном стиле 


Номер 3
Каким образом можно установить значение 1 глобальной переменной a:

Ответ:

 (1) (Let a 1) 

 (2) (set a 1) 

 (3) (setq a 1) 


Упражнение 2:
Номер 1
Какая из форм, представленных ниже, описывает оператор присваивания set, где Alist – ассоциативный список системы:

Ответ:

 (1) (defun set (x y) (cons x y) Alist) 

 (2) (defun set (x y) (eval '(cons x y) Alist) ) 

 (3) (defun set (x y) (assign x y Alist) ) 


Номер 2
Какой результат будет получен при вычислении последовательности форм
			   
    		  (set 'x 'car)
     		  (funcall x '(a b c)) :
			  

Ответ:

 (1) a 

 (2) сообщение об ошибке 

 (3) (car '(a b с)) 

 (4) car 


Номер 3
Какой результат будет получен при вычислении последовательности форм
						    
(set 'x 'y)
(set x 'z)
(setq z 5)
(list x y z) :

Ответ:

 (1) (x y z 5) 

 (2) (x y z) 

 (3) (5 x y)  

 (4) (y z 5) 


Упражнение 3:
Номер 1
Какая из форм может служить аналогом подпрограммы на Pascal 
			
procedure pr(x: integer);
begin
	a:=0;
	for i:=1 to x do
  	    a:=a+1;
      print (a);
end; 

Ответ:

 (1) (defun pr(x) (prog (a) (setq a 0) B (cond ((= a x) (print a)(return a) ) ) (setq a (+ a 1)) (go B) )) 

 (2) (defun pr(x) (prog (a) B (cond ((= a x) (print a)(return a) ) ) (setq a (+ a 1)) (go B) )) 

 (3) (prog pr () (setq a 0) B (cond ((= a x) (print a)(return a) ) ) (setq a (+ a 1)) (go B) ) 


Номер 2
C помощью каких форм можно посчитать количество элементов 'i' в списке 'x':

Ответ:

 (1) (defun pr(x) (prog () (setq i 0) (setq L x) (cond ((Null L) (return i))) (setq L (cdr L)) (setq i (+ i 1)) ) ) 

 (2) (defun pr (x) (prog () (setq i 0) (setq L x) A (cond ((Null L) (return i))) (setq L (cdr L)) (setq i (+ i 1)) (go A) ) ) 

 (3) (defun pr(x i) (cond ((Null x) i)(T (pr (cdr x) (+ i 1))) ))(defun pr0 (x) (pr x 0)) 


Номер 3
Какая из приведенных ниже форм позволяет находить максимальный элемент 'i' списка 'L':

Ответ:

 (1) (prog maxm (i L) (setq i 0) (setq L x) A (cond ((Null L) (return i)) ) (cond ((> (car L) i) (setq i (car L))) ) (setq L (cdr L)) (go A) )  

 (2) (defun maxm (x) ( prog (i L) (setq i 0) (setq L x) A (cond ((Null L) (return i)) ) (cond ((> (car L) i) (setq i (car L))) ) (setq L (cdr L)) (go A) ) ) 

 (3) (defun maxm (x) ( prog (i L) A (cond ((Null L) (return i)) ) (cond ((> (car L) i) (set i (car L))) ) (set L (cdr L)) (Loop A) ) ) 


Упражнение 4:
Номер 1
 Какая из приведенных форм позволяет обратить список 'L':

Ответ:

 (1) (defun rev(L) (prog (x y) A (cond ((Null L) (return x))) (setq y (cdr L)) (cond ((atom y) (go B))) (setq y (rev y)) B (setq x (cons y x)) (setq L (cdr L)) (go A) ) ) 

 (2) (prog rev (L x y) A (cond ((Null L) (return x))) (setq y (cdr L)) (cond ((atom y) (go B))) (setq y (rev y)) B (setq x (cons y x)) (setq L (cdr L)) (go A) ) ) 

 (3) (defun rev(L) (prog () A (cond ((Null L) (return x))) (set 'y (cdr L)) (cond ((atom y) (goto B))) (set'y (rev y)) B (set 'x (cons y x)) (set 'L (cdr L)) (go A) ) ) 


Номер 2
Какая из последовательностей форм позволяет посчитать факториал от N:

Ответ:

 (1) (defun F(N) (cond ((= N 0) 1) (T (* N (F (- N 1)))) ) ) 

 (2) (defun F(N) (prog () (cond ((= N 0) (return 1))) (setq N (* N (F (- N 1)))) (return N) ) ) 

 (3) (defun F(N) (prog () (cond ((= N 0) (return i))) (setq i (* N (F (- N 1)))) (return i) ) ) 


Номер 3
Какая из представленных ниже форм эквивалентна подпрограмме на языке Pascal
	    
Function convert (l: list): integer; // L- список
Begin
    for i:=0 to endoflist do //endoflist – количество элементов списка – 1.
    begin
        if List(L[i] ) then convert(L[i]) else L[i]:=L[i]+5;
//если элемент является списком то вызываем для него функцию convert;    
   end;
End; :

Ответ:

 (1) (defun convert(L) (cond ((Null L) Nil) (T (cond ((Atom (car L)) (cons (+ (car L) 5) (convert (cdr L))) ) (T (cons (convert (car L)) (convert (cdr L)))) ) ) ) )  

 (2) (defun convert(L) (prog () (cond ((Null L) Nil) (T (cond ((Atom (car L)) (cons (+ (car L) 5) (convert (cdr L))) ) (T (cons (convert (car L)) (convert (cdr L)))) ) ) ) ) )  

 (3) (prog convert (L) (cond ((Null L) Nil) (T (cond ((Atom (car L)) (cons (+ (car L) 5) (convert (cdr L))) ) (T (cons (convert (car L)) (convert (cdr L)))) ) ) ) )  




Главная / Программирование / Введение в программирование на Лиспе / Тест 11