Главная / Программирование /
Введение в программирование на Лиспе / Тест 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))))
)
)
)
)