Главная / Программирование /
Стили и методы программирования / Тест 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) то, что хотел, но пустой список не будет рассмотрен в качестве начала