Внимание ! Вопросы к тесту выложены исключительно в ознакомительных целях: количество вопросов может не совпадать с действительным, актуальность не поддерживается,- за решением теста Welcome to the cashier! В основу стандарта языка Пролог положен синтаксис
программирование на хорновских дизъюнктах описание задачи на некотором логическом языке и ее решение посредством вывода в некоторой формальной системе набор инструкций определенного алгоритма из логики предикатов набор инструкций определенного алгоритма из логики высказываний
Логическое программирование в узком смысле это:
набор инструкций определенного алгоритма из логики предикатов набор инструкций определенного алгоритма из логики высказываний описание задачи на некотором логическом языке и ее решение посредством вывода в некоторой формальной системе программирование на хорновских дизъюнктах
Факт – это
правило без заголовка любое логическое высказывание любое правило программы правило без тела
Запрос – это
любое правило программы правило без тела правило без заголовка любой факт
Программа на языке Пролог – это последовательность
правил конъюнктов запросов логических высказываний
likes(bob, X) :- likes(ann, X). likes(ann, books). выглядит следующим образом:
{bob, ann, books} {likes(bob, books), likes(ann, books)} {bob, ann, books, likes(bob, books), likes(ann, books)} {bob, ann, books, X}
Анонимная переменная не принимает никакого значения принимает любое значение принимает определенное значение принимает значение терма, с которым унифицируется
Свободная переменная унифицируется
с любым предикатом с любым термом только с простым термом только с другой свободной переменной
Конкретизированная переменная – это переменная, которая
имеет какое-то значение не имеет никакого значения может иметь значение, может не иметь значения получает значение при инициализации
Наибольший общий унификатор термов t(X, r(a, b), X) и t(X, r(Y, b), b) равен:
X = a, Y = b X = Z, Y = a Y = a, X = b X = Z, Y = T
Не унифицируется пара термов
t(a, b, k(c)) и t(a, b, k(a)) t(a, b, k(c)) и t(X, Y, Z) t(a, b, k(c)) и t(a, b, _) t(a, b, k(c)) и t(_, _, _)
Являются унифицируемыми термы
t(a, r(b, c)) и t(X, p(b, c)) t(a, r(b, c)) и t(X, r(Y)) t(a, r(b, c)) и t(a, X) t(a, r(b, c)) и t(a, b, c)
male(Y); likes(X, Y) 1) Y = bob 2) Y = tom 3) X = tom,Y = baseball 4) X = ann,Y = books
4. 2, 1, 4, 3 3, 4, 1, 2 4, 3, 2, 1 1, 2, 3, 4
Программа имеет вид: female(ann). female(mary). male(tom). male(bob).
Укажите порядок нахождения решений для цели
male(X); female(X) 1) X = ann 2) X = mary 3) X = tom 4) X = bob
4, 3, 2, 1 1, 2, 3, 4 3, 4, 1, 2 2, 1, 4, 3
Программа имеет вид:
male(tom). male(bob). parent(ann, tom).
Укажите порядок нахождения решений для цели
parent(X, Y); male(Y) 1) Y = tom 2) Y = bob 3) X = ann,Y = tom
1, 2, 3 3, 2, 1 2, 1, 3 3, 1, 2
Определение предикатов friend и h имеет вид:
friend(person(ann, 19), phone(1112233)). friend(person(bob, 18), phone(1112233)). friend(person(kate, 19), phone(4445566)). h(X) :- friend(person(X, _), Z), friend(person(Y, _), Z), X > Y.
Напишите ответ на запрос h(X):
kate 19 bob person
Определение предикатов friend и h имеет вид:
friend(person(ann, 19), phone(1112233)). friend(person(bob, 18), phone(1112233)). friend(person(kate, 19), phone(4445566)). h(X) :- friend(person(X, 19), _), friend(person(Y, 18), _), X > Y.
Напишите ответ на запрос h(X):
kate bob 19 person
Определение предикатов friend и h имеет вид:
friend(person(ann, 19), phone(1112233)). friend(person(bob, 18), phone(1112233)). friend(person(kate, 19), phone(4445566)). h(X) :- friend(person(X, Y), _), friend(person(Z, Y), _), X < Z.
Напишите ответ на запрос h(X):
kate ann person bob
Определение предиката p имеет вид: p([parent(robert, black)]). p([parent(ann, smith), parent(thomas, smith)]). Напишите ответ на запрос p([parent(X, smith), _]).
Рассмотрим цели not(parent(X, _)), male(X) и male(X), not(parent(X, _)). Отметьте правильное утверждение:
одна из них имеет два решения, а другая одно решение одна из них имеет решение, а другая не имеет они имеют одинаковый набор решений одна из них имеет два решения, а другая не имеет решений
Рассмотрим цели parent(X, _), not(not(male(X))) и not(not(male(X))), parent(X, _). Отметьте правильное утверждение:
одна из них имеет решение, а другая не имеет они имеют одинаковый набор решений одна из них имеет два решения, а другая одно решение одна из них имеет два решения, а другая не имеет решений
Одинаковое ли количество решений имеют цели male(X), parent(X, _) и male(X), not(not(parent(X, _))):
одна из этих целей не имеет решений одинаковое не одинаковое одна из этих целей не имеет смысла в Прологе
Сколько элементов содержит список [[1, 2, 3, 4]]?
3 2 4 1
Сколько элементов содержит список [[], [], [1], [1, 2], [1, 2, 3, 4]]?
5 4 3 7
Сколько элементов содержит список [[1, 2], [2, 3]]?
3 2 4 1
Укажите все списки, с которыми унифицируется список [_, 2 | _]:
[5, 2] [[1], [2]] [1, 2, 3, 4] [2]
Список [_] унифицируется:
с любым списком с любым непустым списком с пустым списком со списком [1]
Список [_, _] унифицируется:
со списком [[1], [2]] с любым непустым списком с любым списком с пустым списком
В результате унификации списков [1, 2, 3] и [X, Y | Z] переменные получат значения
X = 1, Y = [2], Z = 3 X = 1, Y = 2, Z = 3 X = 1, Y = [2], Z = [3] X = 1, Y = 2, Z = [3]
Укажите все списки, с которыми унифицируется список [_, _ | _]?
[] [1, 2, 3] [[1], [2], [3], [4]] [1] [1, 2]
С каким списком не унифицируется список [1, 2]?
[1, 2 | []] [[1], [2]] [1 | [2 | []]] [1 | [2]]
Динамическое отсечение используется
для предотвращения отката при вычислении каждой подцели для предотвращения отката при вычислении отдельных подцелей так же, как и статическое вместо статического
Отсечение используется:
для предотвращения поиска всех решений для запрета процедуры унификации для предотвращения отката после достижения цели для поиска всех альтернативных решений
Отсечение в запросе используется для того, чтобы запретить поиск альтернативных решений для подцелей, расположенных
после отсечения до и после отсечения иногда до, иногда после отсечения до отсечения
Отсечение в программе
min(X, Y, X):- X < Y, !. min(X, Y, Y):- X >= Y.
является зеленым является динамическим не используется при вычислениях является красным
Отсечение в программе
min(X, Y, X):- Y > X, !. min(_, Y, Y).
не используется при вычислениях является красным является зеленым является динамическим
Программа имеет вид:
male(tom). male(bob).
Отсечение в запросе male(X), !, male (Y) не используется при вычислении этого запроса является динамическим является красным является зеленым
print() :- lang(N, L), write(L), nl, fail. print(). Сколько названий языков будет напечатано при вызове цели print()?
4 1 2 3
Внимание ! Вопросы к тесту выложены исключительно в ознакомительных целях: количество вопросов может не совпадать с действительным, актуальность не поддерживается,- за решением теста Welcome to the cashier! Определение предикатов lang и print имеет вид:
Напишите название фрукта, которое будет напечатано третьим в результате вызова цели print():
pear apple
Определение предикатов fruit и print имеет вид:
fruit(1, apple). fruit(2, pear).
print() :- fruit(N, X), fruit(_, Y), write(X), nl, write(Y), nl, N = 2, !. print(). Напишите название фрукта, которое будет напечатано последним в результате вызова цели print():
pear apple
Определение предикатов fruit и print имеет вид:
fruit(1, apple). fruit(2, pear).
print() :- fruit(_, X), fruit(_, Y), write(X), nl, write(Y), nl, fail. print(). Напишите название фрукта, которое будет напечатано третьим в результате вызова цели print():
apple pear
Определение предиката print имеет вид:
print() :- fail, repeat(), write('a'), !. print(). Сколько раз будет напечатан символ 'a' при вызове цели print()?
более двух раз два раза ни одного раза один раз
Определение предиката print имеет вид:
print() :- write('a'), repeat(), !. print().
Сколько раз будет напечатан символ 'a' при вызове цели print()?
ни одного раза один раз два раза более двух раз
Определение предиката print имеет вид:
print() :- repeat(), write('a'), !. print(). Сколько раз будет напечатан символ 'a' при вызове цели print()?
более двух раз ни одного раза один раз два раза
Определение предикатов fruit и print имеет вид:
fruit(1, apple). fruit(2, pear).
print() :- repeat(), fruit(N, X), write(X), nl, fruit(K, Y), write(Y), nl, N > K, !. print(). Сколько названий фруктов будет напечатано при вызове цели print()?
3 5 4 2
Определение предикатов fruit и print имеет вид:
fruit(1, apple). fruit(2, pear).
print() :- repeat(), fruit(N, X), write(X), nl, fruit(K, Y), write(Y), nl, N < K, !. print(). Сколько названий фруктов будет напечатано при вызове цели print()?
2 4 3 1
Начальное значение факта-переменной n равно 0. Определение предикатов fruit и print имеет вид:
fruit(1, "apple"). fruit(2, "pear").
print() :- repeat(), fruit(_, X), write(X), nl, n := n + 1, n = 3, !. print().
Напишите название фрукта, которое будет напечатано последним при вызове цели print():
pear apple
Начальное значение факта-переменной n равно 0. Определение предикатов fruit и print имеет вид:
fruit(1, "apple"). fruit(2, "pear").
print() :- repeat(), fruit(_, X), n := n + 1, write(X), nl, n = 4, !. print().
Напишите название фрукта, которое будет напечатано последним при вызове цели print():
pear apple
Начальное значение факта-переменной n равно 0. Определение предикатов fruit и print имеет вид:
fruit(1, "apple"). fruit(2, "pear").
print() :- repeat(), n := n + 1, fruit(_, X), write(X), nl, n = 2, !. print(). Напишите название фрукта, которое будет напечатано последним при вызове цели print():
pear apple
Укажите все предикаты, которые используются для добавления фактов во внутреннюю базу данных:
save asserta assert assertz
Добавляет факт в начало внутренней базы данных предикат:
assertz assert save asserta
Укажите все предикаты, которые добавляют факт в конец внутренней базы данных:
save asserta assertz assert
Укажите предикат, который удаляет все записи из внутренней базы данных:
retractFactDb reconsult retractAll retract
Укажите предикат, который может возвращать сведения из фактов, удаляемых из внутренней базы данных:
reconsult retractAll retractFactDb retract
Укажите все предикаты, которые используются для удаления фактов из внутренней базы данных:
retractAll reconsult retract retractFactDb
Определение предиката go имеет вид:
go(N):- N > 1, !, write('a'), N1 = N - 1, go(N1). go(_).
Сколько раз будет напечатан символ 'a' в результате вызова цели go(5)?
2 4 3 5
Определение предиката go имеет вид:
go(N):- write('a'), N > 3, !, N1 = N - 1, go(N1). go(_).
Сколько раз будет напечатан символ 'a' в результате вызова цели go(5)?
3 2 5 4
Определение предиката go имеет вид:
go(2):- !. go(N):- write('a'), N1 = N - 1, go(N1).
Сколько раз будет напечатан символ 'a' в результате вызова цели go(5)?
3 0 2 1
Определение предиката go имеет вид:
go(2):- fail. go(N):- N > 1, write('a'), N1 = N - 1, go(N1). go(_).
Сколько раз будет напечатан символ 'a' в результате вызова цели go(4)?
4 3 0 2
Определение предиката go имеет вид:
go(2):- write('a'), fail. go(N):- N > 1, write('a'), N1 = N - 1, go(N1). go(_).
Сколько раз будет напечатан символ 'a' в результате вызова цели go(4)?
5 3 4 6
Определение предиката go имеет вид:
go(0). go(N):- N > 0, N1 = N - 1, go(N1), write('a').
Сколько раз будет напечатан символ 'a' в результате вызова цели go(2)?
num(X, _, X). num(X, C, Y) :- X > 0, X1 = X - C, num(X1, C, Y).
Сколько решений имеет цель num(3, 2, X)?
5 4 2 3
Определение предиката count имеет вид:
count([], 0). count([_ | T], N) :- count(T, N1), N = N1 + 1. Какое значение примет переменная R в результате вызова цели count([1, 2, 3], R)?
0 3 2 1
Определение предиката count имеет вид:
count([_, _ | T], N) :- !, count(T, N1), N = N1 + 1. count(_, 1). Какое значение примет переменная R в результате вызова цели count([1, 2, 3], R)?
0 2 1 3
Определение предиката count имеет вид:
count([H | T], C, N) :- C1 = C + H, count(T, C1, N). count([], N, N). Какое значение примет переменная R в результате вызова цели count([2, 3, 4], 0, R)?
5 3 2 9
Определение предиката count имеет вид:
count([], 0). count([_], 1). count([_, _ | T], N) :- count(T, N1), N = N1 + 2. Какое значение примет переменная R в результате вызова цели count([1, 2, 3], R)?
3 0 2 1
Определение предиката count имеет вид:
count([H, K | T], C, N) :- C1 = C + H + K, count(T, C1, N). count([H], C, N) :- C1 = C + H, count(T, C1, N). count([], N, N). Какое значение примет переменная R в результате вызова цели count([1, 2, 3], 0, R)?
6 1 9 2
Определение предиката count имеет вид:
count([_, H | T], C, N) :- !, C1 = C + H, count(T, C1, N). count(_, N, N). Какое значение примет переменная R в результате вызова цели count([1, 2, 3], 0, R)?
2 3 1 6
Определение предиката member2 имеет вид:
member2(H, [_, H | _]). member2(H, [_, _ | T]) :- member2(H, T). Сколько решений имеет цель member2(X, [1, 2, 3, 4, 5])?
3 4 2 1
Определение предиката member имеет вид:
member(H, [H | _]). member(H, [_ | T]) :- member(H, T). Сколько решений имеет цель member(X, [2, 3, 4, 5])?
3 4 1 2
Определение предиката member2 имеет вид:
member2(H, [_, H | _]):- !. member2(H, [_, _ | T]) :- member2(H, T). Сколько решений имеет цель member2(X, [1, 2, 3, 4])?
2 1 3 4
Определение предиката append имеет вид:
append([], L, L). append([A | L1], L2, [A | L]) :- append(L1, L2, L). Какое значение примет переменная L в результате вызова append([1, 2, 3], [], L)?