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

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

Упражнение 1:
Номер 1
        	Унифицируются ли и Как унифицируются следующие выражения:
        	
        		f(X, g(Y), h(Y))
        		U(h(A), g(g1(X)), Z)
        	
        

Ответ:

 (1) не унифицируются 

 (2) X= h(A), Y=g1(X), Z=h(Y), U=f 

 (3) Z=h(g1(h(A))), U=f 

 (4) X= h(A), Y=g1(h(A)), Z=h(g1(h(A))), U=f 


Номер 2
        	Унифицируются ли и Как унифицируются следующие выражения:
        		
        			V(f(X,Y), U(Y), h(Y))
        			U(V(a,b), g(b), Z)
        		
        

Ответ:

 (1) не унифицируются 

 (2) X= a, Y=b, Z=h(Y), U=g, V=f 

 (3) Z=h(b), U=g, V=f 

 (4) X= a, Y=b, Z=h(b), U=g, V=f 


Номер 3
        	Унифицируются ли и Как унифицируются следующие выражения:
        	
        		V(f(X,Y), U(Y), h(X)) 
        		f(V(a,b), g(b), Z)
			
        

Ответ:

 (1) не унифицируются 

 (2) X= a, Y=b, Z=h(X), U=g, V=f 

 (3) Z=h(a), U=g, V=f 

 (4) X= a, Y=b, Z=h(b), U=g, V=f 


Упражнение 2:
Номер 1
        	Унифицируются ли и Как унифицируются следующие выражения:
        	
        		f(X, g(Y), h(Y)) 
        		f(h(X), g(g1(X)), Z)
        	
        

Ответ:

 (1) не унифицируются 

 (2) X= h(X), Y=g1(Y), Z=h(Z) 

 (3) Z=h(g1(h(h(...X...)))), x= h(...X...), Y=g1(h(...X...)), где h повторяется бесконечное число раз 

 (4) X= h(X), Y=g1(h(X)), Z=h(g1(h(X))) 

 (5) по определению не унифицируется, но в некоторых версиях языка Prolog будет выдано Z=h(g1(h(h(...X...)))), x= h(...X...), Y=g1(h(...X...)), где h повторяется бесконечное число раз 


Номер 2
        	Унифицируются ли и Как унифицируются следующие выражения:
        	
        		f(X, g(Y, h(Y))) 
        		F(h(a), g(F(X), Z))
        	
        

Ответ:

 (1) не унифицируются 

 (2) x=h(a), Y=F(X), Z=h(Y) F=f 

 (3) Z=h(f(h(a))), X=h(a), Y=f(h(a)) F=f 

 (4) x=h(X), Y=f(h(X)), Z=h(f(h(X))), a=X, F=f 

 (5) F=f, X=h(a), Y=F(h(a)), Z=h(F(h(a))) 


Номер 3
        	Унифицируются ли и Как унифицируются следующие выражения:
        	
        		f(F(X), g(Y, h(Y))) 
        		F(h(a), g(F(X), Z))
        	
        

Ответ:

 (1) не унифицируются 

 (2) x=h(a), Y=F(X), Z=h(Y), F=f 

 (3) Z=h(f(h(a))), x=h(a), Y=f(h(a)), F=h 

 (4) x=h(X), Y=f(h(X)), Z=h(f(h(X))), a=X, F=h 

 (5) F=f, X=h(a), Y=F(h(a)), Z=h(F(h(a))) 


Упражнение 3:
Номер 1
Чем отличается в худшую сторону реализация принципа, положенного в основу языка Prolog, от принципа в исходном виде?

Ответ:

 (1) в основу языка Prolog положена логика, а в самом языке она не реализована 

 (2) в основу языка Prolog положен метод резолюций, но унификация не реализована 

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

 (4) в фрагменте логики, на которую опирается язык Prolog, нет отрицаний, а в языке они введены 


Номер 2
Чем отличается в лучшую сторону реализация принципа, положенного в основу языка Prolog, от принципа в исходном виде?

Ответ:

 (1) в основу языка Prolog положена статическая классическая логика, а в самом языке появилась база динамически обновляемых знаний 

 (2) в методе резолюций, на котором основан Prolog, поиск вывода растет в ширину, а в языке подстановки идут нелинейно 

 (3) в логике задаются лишь сведения, а в языке можно задавать и прямые предписания 

 (4) в фрагменте логики, на которую опирается язык Prolog, нет отрицаний. В языке они корректно введены 


Номер 3
Чем отличается принцип управления языка Prolog, от принципов управления традиционных языков?

Ответ:

 (1) в основу языка Prolog положена классическая логика, а традиционных языков - теория рекурсивных функций 

 (2) в языке Prolog ищется вывод, а в традиционных языках вычисляется программа 

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

 (4) в языке Prolog нет присваивания и циклов и все приходится выражать через рекурсии 


Упражнение 4:
Номер 1
Как организовано динамическое вычисление программ в языке Prolog?

Ответ:

 (1) имеется предикат consult, который позволяет ввести блок программы либо данных 

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

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

 (4) имеется предикат retract, который позволяет удалить из программы более ненужные предложения и факты 

 (5) имеется специальный предикат отсечения !, позволяющий динамически управлять точками возврата 


Номер 2
Как организовать ввод небольшого блока данных в языке Prolog?

Ответ:

 (1) имеется предикат consult, который позволяет ввести блок программы либо данных 

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

 (3) имеется предикат retractall, который позволяет удалить из программы более ненужные предложения и факты 

 (4) имеется специальный предикат отсечения !, позволяющий динамически управлять точками возврата 


Номер 3
Как организовать ввод последовательности данных в языке Prolog?

Ответ:

 (1) имеется предикат consult, который позволяет ввести блок программы либо данных 

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

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

 (4) имеются предикаты put_byte и put_char, которые позволяют написать подпрограмму ввода любых данных 


Упражнение 5:
Номер 1
        	Программист написал следующее предложение, желая выполнить свой оператор proceed_with, имеющий побочный эффект вывода значений на экран, и заканчивающийся корректной неудачей почти всегда, для всех начал списка X вплоть до успеха действий: 
        	
        		accepted(X):- repeat, X=[Y|Z], nu_ee(Z), proceed_with(Y).  
        		nu_ee(Z).
        	
        	Что он получит?

Ответ:

 (1) то, что хотел 

 (2) ошибку 

 (3) переполнение стека 

 (4) бесконечную выдачу значений для первого члена списка 

 (5) то, что хотел, но пустой список не будет рассмотрен в качестве начала 


Номер 2
Какое предложение применяется первым?

Ответ:

 (1) целевое предложение программы 

 (2) первое из описанных в программе 

 (3) функция Main 

 (4) функция Go 

 (5) функция Prolog 


Номер 3
        	Программист написал следующие предложения, желая выполнить свой оператор proceed_with, имеющий побочный эффект вывода значений на экран и заканчивающийся корректной неудачей почти всегда, для всех начал списка X вплоть до успеха действий:
        	
        		my_call(H,X):- not(X=[]), proceed_with(H). 
        		my_call(H,[Y|Z]):- append(H,[Y],U), my_call(U,Z). 
        		accepted(X):- my_call([],X). 
        	
        	Что он получит?

Ответ:

 (1) то, что хотел 

 (2) ошибку 

 (3) переполнение стека 

 (4) бесконечную выдачу значений для первого члена списка 

 (5) то, что хотел, но пустой список не будет рассмотрен в качестве начала 




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