Главная /
Программирование /
Основы программирования на языке Visual Prolog
Основы программирования на языке Visual Prolog - ответы на тесты Интуит
Правильные ответы выделены зелёным цветом.
Все ответы: В курсе изучается логическое программирование и язык Пролог. В качестве реализации языка Пролог используется современная версия языка Visual Prolog. Предназначен для начинающих.
Все ответы: В курсе изучается логическое программирование и язык Пролог. В качестве реализации языка Пролог используется современная версия языка Visual Prolog. Предназначен для начинающих.
Логическое программирование в широком смысле это:
(1) программирование на хорновских дизъюнктах
(2) описание задачи на некотором логическом языке и ее решение посредством вывода в некоторой формальной системе
(3) набор инструкций определенного алгоритма из логики высказываний
(4) набор инструкций определенного алгоритма из логики предикатов
Определение предиката member(bt(_, X, _), X).
member(bt(L, _, R), X):- member(L, X); member(R, X).
Сколько решений имеет цель
member
имеет вид:
member(bt(bt(leaf, 1, leaf), 2, bt(leaf, 1, leaf)), X)
?
(1) 0
(2) 1
(3) 2
(4) 3
Пусть грамматика имеет вид:
d ::= dd | [(]d[)] | empty
, где empty
– пустое слово, в квадратных скобках написаны терминальные символы. Укажите те из перечисленных ниже слов, которые из нее выводятся:
(1)
()
(2)
(())()()
(3)
)()()
(4)
)))(((
В чем заключается метод ван Эмдена по выбору хода в игре?
(1) сделать случайный ход, не приводящий к немедленному проигрышу
(2) сделать первый допустимый ход, не приводящий к немедленному проигрышу
(3) сделать финальный выигрышный ход или такой ход, чтобы противник в результате не смог выиграть
(4) сделать любой допустимый ход, не приводящий к немедленному проигрышу
Конкретизированная переменная – это переменная, которая
(1) не имеет никакого значения
(2) имеет какое-то значение
(3) получает значение при инициализации
(4) может иметь значение, может не иметь значения
Отсечение в запросе используется для того, чтобы запретить поиск альтернативных решений для подцелей, расположенных
(1) после отсечения
(2) до отсечения
(3) до и после отсечения
(4) иногда до, иногда после отсечения
Вызов предиката
fail
(1) всегда успешен
(2) всегда неуспешен
(3) может быть как успешным, так и неуспешным
(4) не может быть ни успешным, ни неуспешным
Определение предиката go(2):- !.
go(N):- write('a'), N1 = N - 1, go(N1).
Сколько раз будет напечатан символ 'a' в результате вызова цели
go
имеет вид:
go(5)
?
(1) 0
(2) 1
(3) 2
(4) 3
Определение предиката count([_, _ | T], N) :- !, count(T, N1), N = N1 + 1.
count(_, 1).
Какое значение примет переменная
count
имеет вид:
R
в результате вызова цели count([1, 2, 3], R)
?
(1) 1
(2) 2
(3) 3
(4) 0
Определение предиката select(A, [A | L], L).
select(A, [B | L], [B | L1]):- select(A, L, L1).
Сколько решений имеет цель
select
имеет вид:
select(X, [1, 2, 2], L)
?
(1) 0
(2) 1
(3) 2
(4) 3
Факт – это
(1) правило без заголовка
(2) правило без тела
(3) любое правило программы
(4) любое логическое высказывание
Определение предиката count(leaf, 0).
count(bt(L, _, R), X):- count(L, Y), count(R, Z), X = Y + Z + 1.
Какое значение примет переменная X в результате вызова цели
count
имеет вид:
count(bt(bt(leaf, 1, leaf), 2, bt(leaf, 1, leaf)), X)
?
(1) 1
(2) 2
(3) 3
(4) 7
В результате вызова
string::frontToken(" Karl meets Carla.", X, Y)
переменные X
и Y
примут значения:
(1)
X = "Karl", Y = " meets Carla."
(2)
X = " Karl", Y = " meets Carla."
(3)
X = "Karl", Y = "meets Carla."
(4)
X = "Karl", Y = "meets"
Напишите значение, которое примет переменная
S
в результате вызова цели S = string::replaceAll("misteri", "i", "Y")
:
(1)
sterymY
(2)
mYsterY
(3)
stermY
(4)
Ysterm
Не унифицируется пара термов
(1)
t(a, b, k(c)) и t(a, b, _)
(2)
t(a, b, k(c)) и t(a, b, k(a))
(3)
t(a, b, k(c)) и t(X, Y, Z)
(4)
t(a, b, k(c)) и t(_, _, _)
Отсечение в программе min(X, Y, X):- X < Y, !.
min(X, Y, Y):- X >= Y.
(1) является зеленым
(2) является красным
(3) является динамическим
(4) не используется при вычислениях
Определение предикатов lang(1, prolog).
lang(2, python).
lang(3, pascal).
print() :- lang(N, L), write(L), nl, N = 2, !.
print().
Сколько названий языков будет напечатано при вызове цели
lang
и print
имеет вид:print()
?
(1) 0
(2) 1
(3) 2
(4) 3
Определение предиката go(2):- write('a'), fail.
go(N):- N > 1, write('a'), N1 = N - 1, go(N1).
go(_).
Сколько раз будет напечатан символ 'a' в результате вызова цели
go
имеет вид:
go(4)
?
(1) 3
(2) 4
(3) 5
(4) 6
Определение предиката count([H | T], C, N) :- C1 = C + H, count(T, C1, N).
count([], N, N).
Какое значение примет переменная
count
имеет вид:R
в результате вызова цели count([2, 3, 4], 0, R)
?
(1) 2
(2) 3
(3) 5
(4) 9
Определение предиката subset([], []).
subset([A | L], [A | S]):- subset(L, S).
subset([_ | L], S):- subset(L, S).
Сколько решений имеет цель
subset
имеет вид:
subset([1, 2, 3], X)
?
(1) 0
(2) 3
(3) 7
(4) 8
Программа имеет вид:
likes(mary, books).
likes(bob, mary).
likes(bob, books).
Напишите решение, которое имеет цель
likes(X, mary)
:
(1) mary
(2) bob
(3) books
Определение предикатов tmember(t(X, _), X).
tmember(t(_, TL), X):- member(T, TL), tmember(T, X).
member(T, [T | _]).
member(T, [_ | L]):- member(T, L).
Сколько решений имеет цель
tmember
и member
имеет вид:
tmember(t(1, [t(2, [t(2, [])]), t(1, [])]), X)
?
(1) 1
(2) 2
(3) 3
(4) 4
Определение предиката scan(S) = [Tok | scan(Rest)]:- string::frontToken(S, Tok, Rest), !.
scan(_) = [].
Какое значение примет переменная
scan
имеет вид:S
в результате вызова S = scan("f(g(1)).")
?
(1)
S = ["f(g(1))", "."]
(2)
S = ["f(g(1))."]
(3)
S = ["f", "(", "g", "(", "1", ")", ")"]
(4)
S = ["f", "(", "g", "(", "1", ")", ")", "."]
Определение предиката count имеет вид:count(L1, L2) = length(filter(L1, {(X):- isMember(X, L2)})). Какое значение примет переменная
L
в результате вызова цели L = count([1, 2, 3], [3, 2, 5])
?
(1) 1
(2) 2
(3) 3
(4) 4
Программа имеет вид:
male(tom).
male(bob).
parent(ann, tom).
Укажите порядок нахождения решений для цели parent(X, Y); male(Y)
1) Y = tom
2) Y = bob
3) X = ann,Y = tom
(1) 1, 2, 3
(2) 3, 2, 1
(3) 3, 1, 2
(4) 2, 1, 3
Предикат
likes(mary, books).
likes(peter, mary).
likes(mary, peter). Цель
likes
определяется следующим образом:likes(X, Y), !, likes(Y, Z)
имеет следующее количество решений:
(1) 0
(2) 1
(3) 2
(4) 3
Определение предикатов fruit(1, apple).
fruit(2, pear).
print() :- fruit(_, X), write(X), nl, fruit(_, Y), write(Y), nl, fail.
print().
Напишите название фрукта, которое будет напечатано третьим в результате вызова цели
fruit
и print
имеет вид:print()
:
(1)
apple
(2)
pear
Определение предикатов parent(tom, ann).
parent(ann, bob).
anc(X, Y):- parent(X, Y).
anc(X, Z):- parent(X, Z), anc(Z, Y).
Сколько решений имеет цель
parent
и anc
имеет вид:
anc(X, Y)
?
(1) 1
(2) 2
(3) 3
(4) 4
Определение предиката member(H, [H | _]).
member(H, [_ | T]) :- member(H, T).
Сколько решений имеет цель
member
имеет вид:member(X, [2, 3, 4, 5])
?
(1) 1
(2) 2
(3) 3
(4) 4
Определение предикатов intersection([], _, []).
intersection([A | L1], L2, [A | L]) :- member(A, L2), !, intersection(L1, L2, L).
intersection([_ | L1], L2, L) :- intersection(L1, L2, L).
member(X, [X | _]):- !.
member(X, [_ | L]):- member(X, L).
Какое решение имеет цель
intersection
и member
имеет вид:
intersection([3, 2, 1], [1, 3, 5], L)
?
(1) [1, 3]
(2) [3, 1]
(3) [3, 2, 1, 5]
(4) [1, 2, 3, 5]
Программа имеет вид:
parent(ann, peter).
parent(ann, mary).
parent(tom, X) :- parent(ann, X).
Сколько решений имеет цель
parent(tom, X)
?
(1) 0
(2) 1
(3) 2
(4) 3
Определение предикатов count(t(X, L), Z):- count1(L, Y), Z = Y + X.
count1([], 0).
count1([T | L], Z):- count(T, X), count1(L, Y), Z = X + Y.
Какое значение примет переменная S в результате вызова цели
count
и count1
имеет вид:
count(t(1, [t(2, [t(2, [])]), t(1, [])]), S)
?
(1) 1
(2) 3
(3) 5
(4) 6
Вне имплементации класса
b
могут вызываться предикаты, объявленные:
(1) в имплементации класса
b
(2) в имплементации класса
b
(3) в декларации класса
b
и в имплементации класса b
(4) в имплементации класса-наследника
В результате вызова цели
S = frontChar(toLowerCase(trim(" ДА ")))
переменная S
примет значение
(1)
'д'
(2)
'Д'
(3) не примет никакого значения
(4)
' '
Определение предикатов
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):
friend
и h
имеет вид:
(1)
bob
(2)
19
(3)
kate
(4)
person
Определение предикатa digit(0).
digit(1):- !.
digit(2).
Сколько решений имеет цель
digit
имеет вид:digit(X), digit(Y), !, digit(Z)
?
(1) 0
(2) 1
(3) 2
(4) 3
Определение предиката print() :- repeat(), write('a'), !.
print().
Сколько раз будет напечатан символ 'a' при вызове цели
print
имеет вид:print()
?
(1) ни одного раза
(2) один раз
(3) два раза
(4) более двух раз
Определение предиката f(0, 3):- !.
f(X, R):- X1 = X - 1, f(X1, R1), R = R1 + 2.
Какое значение примет переменная Y в результате вызова цели
f
имеет вид:
f(2, Y)
?
(1) 3
(2) 5
(3) 7
(4) 8
Определение предиката member2(H, [_, H | _]):- !.
member2(H, [_, _ | T]) :- member2(H, T).
Сколько решений имеет цель
member2
имеет вид:member2(X, [1, 2, 3, 4])
?
(1) 1
(2) 2
(3) 3
(4) 4
Предикат сортировки списка
list::sort
в языке Visual Prolog определяется с помощью алгоритма сортировки
(1) слиянием
(2) быстрой
(3) вставками
(4) пузырьком
Отношение likes определяется следующим образом:likes(bob, X) :- likes(ann, X).
likes(ann, books).
likes(tom, ann).
Укажите весь набор значений, которые примет переменная
X
в результате вычисления запроса likes(_, X)
?
(1)
books
(2)
books; ann
(3)
books; books; ann
(4)
bob; ann; tom
Выберите из списка терм и соответствующий ему домен:
(1) 1, 3
(2) 2, 4
(3) 1, 4
(4) 2, 3
В языке Visual Prolog классы могут порождать объекты
(1) тогда и только тогда, когда они имеют интерфейс
(2) когда они не имеют интерфейса
(3) независимо от того, имеют они интерфейс или нет
(4) классы не могут порождать объекты в Visual Prolog
Определение предикатов pet(h(C, N, Pt, D, S), P) = h(C, N, P, D, S):- unif(Pt, P).
unif(X, Y):- X = empty, !; Y = X.
Вызов
pet
и unif
имеет вид:<…>, House = pet(h(empty, empty, Pt, empty, empty), P)
успешен
(1) только если
P = Pt
(2) если
Pt = empty или P = Pt
(3) только если
Pt = empty
(4) всегда
Определение предиката
p([parent(robert, jackson)]).
p([parent(ann, smith), parent(thomas, smith)]).
Напишите ответ на запрос
p
имеет вид:p([_, parent(_, X)])
:
(1)
smith
(2)
robert
(3)
thomas
(4)
jackson
Определение предикатa color(red).
color(yellow).
color(yellow) :- !.
color(green).
Цель
color
имеет вид:findall(X, color(X), L)
имеет решение:
(1)
L = [red]
(2)
L = [red, yellow]
(3)
L = [red, yellow, yellow]
(4)
L = [red, yellow, green]
Определение предикатов fruit(1, apple).
fruit(2, pear).
print() :- repeat(), fruit(N, X), write(X), nl, fruit(K, Y), write(Y), nl, N < K, !.
print().
Сколько названий фруктов будет напечатано при вызове цели
fruit
и print
имеет вид:print()
?
(1) 1
(2) 2
(3) 3
(4) 4
Определение предиката g имеет вид:
g(0, R, R):- !.
g(X, C, R):- X1 = X - 1, C1 = C * 2, g(X1, C1, R).
Какое значение примет переменная
Y
в результате вызова цели g(2, 3, Y)
?
(1) 12
(2) 24
(3) 18
(4) 10
Определение предиката append([], L, L).
append([A | L1], L2, [A | L]) :- append(L1, L2, L).
Какое значение примет переменная L в результате вызова
append
имеет вид:append([1, 2], [2, 3], L)
?
(1) [1, 2, 3]
(2) [1, 3]
(3) [1, 2, 2, 3]
(4) []
Цель
L = list::map([-1, 2, -3], {(X) = -X})
имеет решение:
(1) [-1, -2, -3]
(2) [2]
(3) [1, -2, 3]
(4) [-1, -3]
Определение отношения parent имеет вид
parent(ann, tom).
parent(bob, ann).
Обратное отношение к отношению parent можно определить следующим образом:
(1)
child(X, Y) :- parent(Y, X)
(2)
child(X, Y) :- parent(X, Z), parent(Z, Y)
(3)
child(X, Y) :- parent(X, Y)
(4)
child(X, Y) :- parent(X, Y); parent(Y, X)
Какое значение примет переменная
X
в результате вызова цели X = math::restrict(3, 0, 1)
?
(1) 1
(2) 0
(3) 3
(4) не примет никакого значения
Определение класса interface b
properties a : integer.
end interface b
class b : b
predicates counter : () -> integer.
end class b
implement b
facts a : integer := 0.
class facts n : integer := 0.
clauses new():- n := n + 1.
counter() = n.
end implement b
Какое число будет напечатано в результате вызова цели
b
с интерфейсом b
имеет вид:X = b::new(), X:a := 2, Y = b::new(), Y:a := X:a + 1, stdio::write(X:a+Y:a+b::counter())
?
(1) 0
(2) 7
(3) 5
(4) 3
Определение предиката member(H, [H | _]).
member(H, [_ | T]):- member(H, T).
Цель
member
в PIE имеет вид:L = [_, _], member(1, L)
имеет в PIE следующий набор решений:
(1)
L = [1, _]; L = [_, 1]
(2)
L = [1]
(3)
Эта цель не имеет решений
(4)
L = [1, 1]
Определение предикатов
male(peter).
male(bob).
likes(peter, bycicle).
Напишите решение для цели
likes
и male
выглядит следующим образом:
male(Y), not(likes(Y, _))
:
(1)
peter
(2)
bob
(3)
bycicle
Предикаты digit(0).
digit(1).
triple(t(X, Y, Z)) :- digit(X), digit(Y), digit(Z).
Цель имеет вид:
digit
и triple
определяются следующим образом:findall(T, triple(T), L)
. Сколько элементов содержит список L?
(1) 2
(2) 3
(3) 8
(4) 9
Начальное значение факта-переменной n равно 0. Определение предикатов fruit(1, "apple").
fruit(2, "pear").
print() :- repeat(), fruit(_, X), n := n + 1, write(X), nl, n = 4, !.
print().
Напишите название фрукта, которое будет напечатано последним при вызове цели
fruit
и print
имеет вид:print()
:
(1)
apple
(2)
pear
Определение функции f имеет вид:
f(0, R) = R:- !.
f(X, C) = f(X - 2, C * C).
Какое значение примет переменная
Y
в результате вызова цели Y = f(4, 2)
?
(1) 0
(2) 4
(3) 8
(4) 16
Определение предиката append([], L, L).
append([A | L1], L2, [A | L]) :- append(L1, L2, L).
Какое значение примет переменная L в результате вызова
append
имеет вид:append(L, [_, 2], [1, 2, 3])
?
(1) [1]
(2) [1, 2]
(3) [3]
(4) не примет никакого значения
Определение предикатов arc(1, 2).
arc(1, 3).
arc(3, 4).
conn(X, X).
conn(X, Z):- arc(X, Y), conn(Y, Z).
Сколько решений имеет цель
arc
и conn
имеет вид:
conn(1, X)
?
(1) 1
(2) 2
(3) 3
(4) 4
Отношение likes определяется в виде:
likes(bob, X) :- likes(ann, X).
likes(ann, books).
likes(tom, ann).
Вариантом правила
likes(bob, X) :- likes(ann, X)
является правило
(1)
likes(tom, X) :- likes(ann, X)
(2)
likes(bob, Z) :- likes(ann, Z)
(3)
likes(bob, books) :- likes(ann, books)
(4)
likes(Z, X) :- likes(Y, X)
В результате вызова
S = string::concat("ab", "bc")
переменная S
примет значение:
(1)
"abc"
(2)
"ac"
(3)
"abbc"
(4)
"a"
Если пространство состояний моделируется в виде графа, то обычно:
(1) состояниям соответствуют вершины, а переходам между ними ребра
(2) состояниям соответствуют ребра, а переходам между ними вершины
(3) состояниям и переходам между ними соответствуют ребра
(4) состояниям и переходам между ними соответствуют вершины
Определение предиката conc(d(A, B), d(B, C), d(A, C)). В результате вызова
conc
в PIE имеет вид:conc(d([1, 2 | X], X), d([2, 3], []), d(L, _))
переменная L
примет значение
(1)
[1]
(2)
[1, 2, 2, 3]
(3)
[1, 2, _]
(4)
[1, 3]
Определение предикатов
male(tom).
male(bob).
parent(tom, mary).
parent(tom, ann).
Одинаковое ли количество решений имеют цели
male
и parent
имеет вид:male(X), parent(X, _) и male(X), not(not(parent(X, _))):
(1) одинаковое
(2) не одинаковое
(3) одна из этих целей не имеет смысла в Прологе
(4) одна из этих целей не имеет решений
Определение предиката digit(0).
digit(1). В каком порядке будут найдены решения для цели
digit
имеет вид:digit(X), digit(Y)
?
(1) 1, 2, 3, 4
(2) 1, 3, 4, 2
(3) 1, 2, 4, 3
(4) 1, 3, 2, 4
Добавляет факт в начало внутренней базы данных предикат:
(1)
assert
(2)
asserta
(3)
save
(4)
assertz
Определение предиката num(X, X).
num(X, Y) :- X < 2, X1 = X + 1, num(X1, Y).
Сколько решений имеет цель
num
имеет вид:
num(-1, X)
?
(1) 2
(2) 3
(3) 4
(4) 5
Определение предиката reverse([], L, L).
reverse([A | L1], L2, L) :- reverse(L1, [A | L2], L).
В результате вызова
reverse
имеет вид:reverse([1, 2], [3], L)
переменная L примет значение
(1) [3, 2, 1]
(2) [2, 1, 3]
(3) не примет никакого значения
(4) [1, 2, 3]
Определение предикатов arc(1, 3).
arc(3, 4).
path([X | L], X, [X | L]).
path([X | L], Y, P):- arc(X, Z), not(isMember(Z, L)), path([Z, X | L], Y, P).
Предикат path реализует алгоритм
arc
и path
имеет вид:
(1) поиска в глубину
(2) поиска в ширину
(3) поиска кратчайшего пути в глубину
(4) «первый лучший»
Эрбранов универсум логической программыlikes(bob, X) :- likes(ann, X).
likes(ann, books).
выглядит следующим образом:
(1)
{bob, ann, books, likes(bob, books), likes(ann, books)}
(2)
{bob, ann, books}
(3)
{likes(bob, books), likes(ann, books)}
(4)
{bob, ann, books, X}
В результате вызова
string::splitStringBySeparators(" 12-30+15", "+-", X, Y, Z)
переменные X, Y
и Z
примут значения:
(1)
X = "12", Y = '-', Z = "30+15"
(2)
X = " 12", Y = '-', Z = "30+15"
(3)
X = " 12-30", Y = '+', Z = "15"
(4)
X = "12-30", Y = '+', Z = "15"
Отметьте верное утверждение. Поиск в глубину на графе пространства состояний обычно используется:
(1) если пространство состояний очень велико
(2) для поиска кратчайших путей
(3) если пространство состояний не слишком велико
(4) если другими способами найти решение не удается
В результате вызова в PIE цели
functor(Term, person, 2), arg(1, Term, bob)
переменная Term
примет значение
(1)
person(bob, _)
(2)
person(bob)
(3)
person(_, bob)
(4)
person(bob, bob)
Сколько элементов содержит список [[1, 2], [2, 3]]?
(1) 4
(2) 3
(3) 2
(4) 1
Определение предикатов parent("Mary", "Bob").
parent("Mary", "Tom").
parent("Ann", "Mary").
grandparent(X, Y):- parent(X, Z), parent(Z, Y).
run():- grandparent(X, Y), write(X, " - ", Y), nl, fail; _ = readLine().
Предикат
parent, grandparent
и run
имеет вид:parent
объявлен в разделе class predicates
. Укажите правильное объявление:
(1)
parent: (string, string) nondeterm (o,o) (i,o) (o,i) (i,i).
(2)
parent: (string, string) determ.
(3)
parent: (string, string) multi (o,o) nondeterm (i,o).
(4)
parent: (string, string) nondeterm (o,o).
Укажите все предикаты, которые используются для удаления фактов из внутренней базы данных:
(1)
retract
(2)
retractAll
(3)
reconsult
(4)
retractFactDb
Определение предиката num(X, _, X).
num(X, C, Y) :- X > 0, X1 = X - C, num(X1, C, Y).
Сколько решений имеет цель
num
имеет вид:
num(3, 2, X)
?
(1) 2
(2) 3
(3) 4
(4) 5
Определение предиката prefix(_, []).
prefix([A | L1], [A | L2]) :- prefix(L1, L2).
Сколько решений имеется для цели
prefix
имеет вид:refix([1, 2], L)
?
(1) 0
(2) 1
(3) 2
(4) 3
Определение предикатов arc(1, 2).
arc(1, 3).
arc(3, 4).
arc(2, 4).
cont([X | L], [Z, X | L]):- arc(X, Z), not(isMember(Z, L)).
path([[Y | L] | _], Y, [Y | L]):- !.
path([P | PL], Y, R):- findall(P1, cont(P, P1), L1), append(PL, L1, PL1),
path(PL1, Y, R).
Укажите решение для цели
arc, cont
и path
имеет вид:
path([[1]], 4, P)
.
(1) [1, 3, 4]
(2) [1, 2, 4]
(3) [4, 2, 1]
(4) [4, 3, 1]
Список
[_]
унифицируется:
(1) с любым списком
(2) с пустым списком
(3) со списком [1]
(4) с любым непустым списком
С каким списком не унифицируется список [1, 2]?
(1)
[1, 2 | []]
(2)
[1 | [2]]
(3)
[1 | [2 | []]]
(4)
[[1], [2]]
Логическое программирование в узком смысле это:
(1) программирование на хорновских дизъюнктах
(2) описание задачи на некотором логическом языке и ее решение посредством вывода в некоторой формальной системе
(3) набор инструкций определенного алгоритма из логики высказываний
(4) набор инструкций определенного алгоритма из логики предикатов
Определение предиката member(bt(_, X, _), X):- !.
member(bt(L, _, R), X):- member(L, X); member(R, X).
Сколько решений имеет цель
member
имеет вид:
member(bt(bt(leaf, 1, leaf), 2, bt(leaf, 3, leaf)), X)
?
(1) 0
(2) 1
(3) 2
(4) 3
Пусть грамматика имеет вид:
d ::= dd | d[a] | [b]
, где в квадратных скобках написаны терминальные символы. Укажите те из перечисленных ниже слов, которые из нее выводятся:
(1)
a
(2)
ab
(3)
baa
(4)
bbb
Выигрышная позиция в игре – это позиция,
(1) в которой игрок выиграет, как бы он ни ходил
(2) в которой игрок выиграет, если знает, как ходить
(3) которая является последней
(4) в которой невозможно проиграть
Свободная переменная унифицируется
(1) только с другой свободной переменной
(2) с любым предикатом
(3) только с простым термом
(4) с любым термом
Динамическое отсечение используется
(1) для предотвращения отката при вычислении отдельных подцелей
(2) так же, как и статическое
(3) вместо статического
(4) для предотвращения отката при вычислении каждой подцели
Вызов предиката
repeat
(1) всегда успешен
(2) всегда неуспешен
(3) может быть как успешным, так и неуспешным
(4) не может быть ни успешным, ни неуспешным
Определение предиката go(N):- N > 1, !, write('a'), N1 = N - 1, go(N1).
go(_).
Сколько раз будет напечатан символ 'a' в результате вызова цели
go
имеет вид:
go(5)
?
(1) 2
(2) 3
(3) 4
(4) 5
Определение предиката count([], 0).
count([_ | T], N) :- count(T, N1), N = N1 + 1.
Какое значение примет переменная
count
имеет вид:R
в результате вызова цели count([1, 2, 3], R)
?
(1) 1
(2) 2
(3) 3
(4) 0
Определение предиката select(A, [A | L], L).
select(A, [B | L], [B | L1]):- select(A, L, L1), A <> B.
Сколько решений имеет цель
select
имеет вид:
select(X, [2, 1, 2], L)
?
(1) 0
(2) 1
(3) 2
(4) 3
Запрос – это
(1) любое правило программы
(2) любой факт
(3) правило без заголовка
(4) правило без тела
Определение предиката count(leaf, 0).
count(bt(leaf, _, leaf), 1):- !.
count(bt(L, _, R), X):- count(L, Y), count(R, Z), X = Y + Z.
Какое значение примет переменная X в результате вызова цели
count
имеет вид:
count(bt(bt(leaf, 1, leaf), 2, bt(leaf, 1, leaf)), X)
?
(1) 1
(2) 2
(3) 3
(4) 7
В результате вызова
string::frontToken(" 23 + 5", X, Y)
переменные X
и Y
примут значения:
(1)
X = " 2", Y = "3 + 5"
(2)
X = " 23", Y = " + 5"
(3)
X = "23", Y = " + 5"
(4)
X = "23", Y = "+ 5"
Напишите значение, которое примет переменная
S
в результате вызова цели S = string::replacePart("prolog", 5, 0, "n")
:
(1)
prolong
(2)
long
(3)
longpro
(4)
prol
Являются унифицируемыми термы
(1)
t(a, r(b, c)) и t(a, b, c)
(2)
t(a, r(b, c)) и t(X, r(Y))
(3)
t(a, r(b, c)) и t(a, X)
(4)
t(a, r(b, c)) и t(X, p(b, c))
Отсечение в программе
min(X, Y, X):- Y > X, !.
min(_, Y, Y).
(1) является зеленым
(2) является красным
(3) является динамическим
(4) не используется при вычислениях
Определение предикатов lang(1, prolog).
lang(2, python).
lang(3, pascal).
print() :- lang(N, L), write(L), nl, fail.
print().
Сколько названий языков будет напечатано при вызове цели
lang
и print
имеет вид:print()
?
(1) 1
(2) 2
(3) 3
(4) 6
Определение предиката go(2):- fail.
go(N):- N > 1, write('a'), N1 = N - 1, go(N1).
go(_).
Сколько раз будет напечатан символ 'a' в результате вызова цели
go
имеет вид:
go(4)
?
(1) 3
(2) 2
(3) 0
(4) 4
Определение предиката 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).
Какое значение примет переменная
count
имеет вид:R
в результате вызова цели count([1, 2, 3], 0, R)
?
(1) 1
(2) 2
(3) 6
(4) 9
Определение предиката subset(0, [], []):- !.
subset(N, [A | L], [A | S]):- N1 = N - 1, subset(N1, L, S).
subset(N, [_ | L], S):- subset(N, L, S).
Сколько решений имеет цель
subset
имеет вид:
subset(2, [1, 2, 3], X)
?
(1) 0
(2) 3
(3) 7
(4) 8
Программа имеет вид:
parent(bob, peter).
parent(ann, peter).
parent(peter, mary).
Напишите значение, которое примет переменная
X
при вызове parent(X, mary)
?
(1) bob
(2) peter
(3) ann
(4) mary
Определение предикатов tmember(t(X, []), X).
tmember(t(_, TL), X):- member(T, TL), tmember(T, X).
member(T, [T | _]).
member(T, [_ | L]):- member(T, L).
Сколько решений имеет цель
tmember
и member
имеет вид:
tmember(t(1, [t(2, [t(2, [])]), t(1, [])]), X)
?
(1) 1
(2) 2
(3) 3
(4) 4
Определение предиката scan(S) = [Tok | scan(Rest)]:- string::frontToken(S, Tok, Rest), !.
scan(_) = [].
Какое значение примет переменная
scan
имеет вид:S
в результате вызова S = scan(" 20 + 2! ")
?
(1)
S = ["20 + 2!"]
(2)
S = ["20", "+", "2!"]
(3)
S = ["20", "+", "2", "!"]
(4)
S = ["2", "0", "+", "2", "!"]
Определение предиката subset имеет вид:subset(0, _) = []:- !.
subset(N, [X | L]) = [X | subset(N - 1, L)].
subset(N, [_ | L]) = subset(N, L).
Сколько решений имеет цель
L = subset(2, [1, 2, 3])
?
(1) 0
(2) 1
(3) 2
(4) 3
Программа имеет вид:
female(ann).
female(mary).
male(tom).
male(bob).
Укажите порядок нахождения решений для цели male(X); female(X)
1) X = ann
2) X = mary
3) X = tom
4) X = bob
(1) 3, 4, 1, 2
(2) 4, 3, 2, 1
(3) 1, 2, 3, 4
(4) 2, 1, 4, 3
Предикат parent(peter, mary).
parent(mary, ann).
parent(mary, bob). Цель
parent
определяется следующим образом:!, parent(X, Y), parent(Y, Z)
имеет следующее количество решений:
(1) 0
(2) 1
(3) 2
(4) 3
Определение предикатов fruit(1, apple).
fruit(2, pear).
print() :- fruit(_, X), fruit(_, Y), write(X), nl, write(Y), nl, fail.
print().
Напишите название фрукта, которое будет напечатано третьим в результате вызова цели
fruit
и print
имеет вид:print()
:
(1)
apple
(2)
pear
Определение предикатов parent(tom, ann).
parent(ann, bob).
anc(X, Y):- parent(X, Y).
anc(X, Z):- parent(X, Z), anc(Z, Y).
Сколько решений имеет цель
parent
и anc
имеет вид:
anc(tom, X)
?
(1) 1
(2) 2
(3) 3
(4) 4
Определение предиката member2(H, [_, H | _]).
member2(H, [_, _ | T]) :- member2(H, T).
Сколько решений имеет цель
member2
имеет вид:member2(X, [1, 2, 3, 4, 5])
?
(1) 1
(2) 2
(3) 3
(4) 4
Определение предикатов difference([], _, []).
difference([A | L1], L2, L) :- member(A, L2), !, difference(L1, L2, L).
difference([A | L1], L2, [A | L]) :- difference(L1, L2, L).
member(X, [X | _]):- !.
member(X, [_ | L]):- member(X, L).
Какое решение имеет цель
difference
и member
имеет вид:
difference([4, 3, 2, 1], [1, 3, 5], L)
?
(1) [4, 2]
(2) [2, 4]
(3) [3, 1]
(4) [1, 3]
Программа имеет вид:
parent(bob, X):- parent(ann, X).
parent(ann, peter).
parent(peter, mary).
Сколько решений имеет цель
parent(X, peter)
?
(1) 0
(2) 1
(3) 2
(4) 3
Определение предикатов count(t(X, L), Z):- count1(L, Y), Z = Y + X.
count1([], 0).
count1([T | _], Z):- count(T, Z).
Какое значение примет переменная
count
и count1
имеет вид:
S
в результате вызова цели count(t(1, [t(2, [t(2, [])]), t(1, [])]), S)
?
(1) 1
(2) 3
(3) 5
(4) 6
Определение предиката пишется:
(1) в имплементации класса
(2) в декларации класса
(3) в декларации класса и в имплементации класса
(4) в декларации класса-наследника
Признак N присутствует, если в базе данных имеется факт correct(L):- answer(N, 1), not(isMember(N, L)), !, fail; succeed(). Предикат истинен, если
answer(N, 1)
, и отсутствует, если в ней имеется факт answer(N, 0)
. Определение предиката correct
имеет вид:
(1) имеются все необходимые признаки
(2) имеется признак, которого нет в списке L
(3) нет признаков, которых не было бы в списке L
(4) никаких признаков не обнаружено
Определение предикатов
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):
friend
и h
имеет вид:
(1)
bob
(2)
19
(3)
kate
(4)
person
Определение предиката color(red).
color(yellow) :- !.
color(green).
Сколько решений имеет цель
color
имеет вид:color(X), color(Y)
?
(1) 1
(2) 2
(3) 3
(4) 4
Определение предиката print() :- write('a'), repeat(), !.
print().
Сколько раз будет напечатан символ 'a' при вызове цели
print
имеет вид:print()
?
(1) ни одного раза
(2) один раз
(3) два раза
(4) более двух раз
Определение предиката f имеет вид:
f(0, 2):- !.
f(X, R):- X1 = X - 1, f(X1, R1), R = R1 * 3.
Какое значение примет переменная
Y
в результате вызова цели f(2, Y)
?
(1) 18
(2) 9
(3) 12
(4) 6
Определение предиката member1(H, [H, _ | _]).
member1(H, [_, _ | T]) :- !, member1(H, T).
Сколько решений имеет цель
member1
имеет вид:member1(X, [1, 2, 3, 4, 5])
?
(1) 1
(2) 2
(3) 3
(4) 4
Предикат сортировки списка по заданному критерию
list::sortBy
в языке Visual Prolog определяется с помощью алгоритма сортировки
(1) быстрой
(2) вставками
(3) слиянием
(4) пузырьком
Отношение likes определяется следующим образом:
likes(ann, books).
likes(tom, ann).
likes(bob, X) :- likes(ann, X).
Укажите весь набор значений, которые примет переменная
X
в результате вычисления запроса likes(X, _)
?
(1)
ann; tom; bob; ann
(2)
ann; tom; bob
(3)
ann; tom
(4)
ann
Выберите из списка терм и соответствующий ему домен:
(1) 1, 3
(2) 2, 4
(3) 1, 4
(4) 2, 3
В языке Visual Prolog предикаты, объявленные в декларации класса
(1) не должны иметь определения
(2) могут быть определены в имплементации любого класса
(3) должны быть определены в той же декларации класса
(4) определяются в имплементации этого же класса
В результате вызова
memberIndex_nd(X, I, [1, 2, 3])
переменные X
и I
последовательно примут следующие значения:
(1)
X = 1, I = 2
(2)
X = 1, I = 1; X = 2, I = 2; X = 3, I = 3
(3)
X = 1, I = 0; X = 2, I = 1; X = 3, I = 2
(4)
X = 1, I = 0
Определение предиката p имеет вид:
p([father(robert, jackson)]).
p([mother(ann, smith), father(thomas, smith)]).
Напишите ответ на запрос
p([father(_, X) | _])
:
(1)
smith
(2)
robert
(3)
thomas
(4)
jackson
Определение предикатa color(red):- !.
color(yellow).
color(green).
Цель findall(X, color(X), L) имеет решение:
color
имеет вид:
(1)
L = []
(2)
L = [red]
(3)
L = [red, yellow]
(4)
L = [red, yellow, green]
Определение предикатов fruit(1, apple).
fruit(2, pear).
print() :- repeat(), fruit(N, X), write(X), nl, fruit(K, Y), write(Y), nl, N > K, !.
print().
Сколько названий фруктов будет напечатано при вызове цели
fruit
и print
имеет вид:print()
?
(1) 2
(2) 3
(3) 4
(4) 5
Определение предиката g(0, R, R):- !.
g(X, C, R):- X1 = X - 1, C1 = 2 * C + 1, g(X1, C1, R).
Какое значение примет переменная
g
имеет вид:
Y
в результате вызова цели g(2, 2, Y)
?
(1) 5
(2) 10
(3) 11
(4) 12
Определение предиката append([], L, L).
append([A | L1], L2, [A | L]) :- append(L1, L2, L).
Какое значение примет переменная L в результате вызова
append
имеет вид:append([1, 2, 3], [], L)
?
(1) [1, 2, 3]
(2) []
(3) не примет никакого значения
(4) [1]
Цель
L = list::filter([-1, 2, -3], {(X):- X < 0})
имеет решение:
(1) [-1, -2, -3]
(2) [2]
(3) [1, -2, 3]
(4) [-1, -3]
Отношение married определяется в виде:
married(tom, mary).
married(bob, ann).
Симметричное замыкание отношения married можно определить следующим образом:
(1)
spouses(X, Y) :- married(X, Y), married(Y, X)
(2)
spouses(X, Y) :- married(X, Y); married(Y, X)
(3)
spouses(X, Y) :- married(X, Z), married(Z, Y)
(4)
spouses(X, Y) :- married(X, Z); married(Y, Z)
Какое значение примет переменная
X
в результате вызова цели X = math::restrict(2, 0, 3)
?
(1) 0
(2) 3
(3) 2
(4) не примет никакого значения
Определение класса interface b
properties a : integer.
end interface b
class b : b
end class b
implement b
facts a : integer := 0.
end implement b
Какое число будет напечатано в результате вызова цели
b
с интерфейсом b
имеет вид:X = b::new(), X:a := 2, Y = b::new(), Y:a := X:a + 1, stdio::write(X:a+Y:a+5)
?
(1) 0
(2) 7
(3) 10
(4) 8
В результате вызова в PIE цели
L = [[1] | _], L = [_, [], 2]
переменная L
примет значение
(1)
[[1], 2 | []]
(2)
[[1], _, [], 2]
(3)
не примет никакого значения
(4)
[[1], [], 2]
Определение предикатов
married(tom, mary).
female(mary).
female(ann).
Напишите решение для цели
married
и female
выглядит следующим образом:female(X), not(married(_, X))
:
(1)
mary
(2)
ann
(3)
tom
Предикаты digit и tuple определяются следующим образом:digit(0).
digit(1).
digit(2).
tuple(t(X, Y)) :- digit(X), digit(Y).
Цель имеет вид:
findall(T, tuple(T), L)
. Сколько элементов содержит список L?
(1) 2
(2) 3
(3) 8
(4) 9
Начальное значение факта-переменной n равно 0. Определение предикатов fruit(1, "apple").
fruit(2, "pear").
print() :- repeat(), n := n + 1, fruit(_, X), write(X), nl, n = 2, !.
print().
Напишите название фрукта, которое будет напечатано последним при вызове цели
fruit
и print
имеет вид:print()
:
(1)
apple
(2)
pear
Определение функции f имеет вид:
f(1, R) = R:- !.
f(X, C) = f(X - 3, C * C - 1).
Какое значение примет переменная
Y
в результате вызова цели Y = f(7, 2)
?
(1) 13
(2) 8
(3) 9
(4) 3
Определение предиката append([], L, L).
append([A | L1], L2, [A | L]) :- append(L1, L2, L).
Сколько решений имеет цель
append
имеет вид:append(L, [_], [1, 2, 3])
?
(1) 0
(2) 1
(3) 2
(4) 3
Определение предикатов arc(1, 2).
arc(1, 3).
arc(3, 4).
conn(X, X).
conn(X, Z):- arc(X, Y), conn(Y, Z).
Сколько решений имеет цель
arc
и conn
имеет вид:
conn(X, 4)
?
(1) 1
(2) 2
(3) 3
(4) 4
Результат применения подстановки
{X = bob}
к формуле f(X, ann, X)
равен
(1)
f(bob, ann, X)
(2)
f(X, bob, X)
(3)
f(X, ann, bob)
(4)
f(bob, ann, bob)
В результате вызова
S = string::concat("aa", "bb", "cc")
переменная S
примет значение:
(1)
"abc"
(2)
"aabb"
(3)
"aacc"
(4)
"aabbcc"
Состояниям на графе пространства состояний обычно соответствуют:
(1) ребра
(2) вершины
(3) концевые вершины
(4) пути
Определение предиката conc(d(A, B), d(B, C), d(A, C)). В результате вызова
conc
в PIE имеет вид:conc(d([1, 2 | X], X), d([2, 3], []), d(L, _))
переменная X
примет значение
(1)
[3]
(2)
[1, 2, 2, 3]
(3)
[]
(4)
[2, 3]
Определение предикатов male и parent имеет вид:
male(tom).
male(bob).
parent(tom, mary).
parent(tom, ann).
Рассмотрим цели
not(parent(X, _)), male(X) и male(X), not(parent(X, _))
. Отметьте правильное утверждение:
(1) они имеют одинаковый набор решений
(2) одна из них имеет два решения, а другая не имеет решений
(3) одна из них имеет решение, а другая не имеет
(4) одна из них имеет два решения, а другая одно решение
Определение предиката digit(1).
digit(0).
В каком порядке будут найдены решения для цели
digit
имеет вид:digit(X), digit(Y)
?
(1) 1, 2, 3, 4
(2) 1, 2, 4, 3
(3) 2, 4, 1, 3
(4) 2, 4, 3, 1
Укажите все предикаты, которые добавляют факт в конец внутренней базы данных:
(1)
assert
(2)
asserta
(3)
save
(4)
assertz
Определение предиката num(X, X).
num(X, Y) :- X > 0, X1 = X - 1, num(X1, Y).
Сколько решений имеет цель
num
имеет вид:
num(4, X)
?
(1) 2
(2) 3
(3) 4
(4) 5
Определение предиката reverse([], L, L).
reverse([A | L1], L2, L) :- reverse(L1, [A | L2], L).
В результате вызова
reverse
имеет вид:reverse([1, 2, 2], [], L)
переменная L примет значение
(1) [2, 1, 2]
(2) [1, 2, 2]
(3) [1, 2, 2]
(4) [2, 2, 1]
Определение предикатов arc(1, 2).
arc(1, 3).
arc(3, 4).
path([X | L], X, [X | L]).
path([X | L], Y, P):- arc(X, Z), not(isMember(Z, L)), path([Z, X | L], Y, P).
В результате вызова цели
arc
и path
имеет вид:
path([1], 4, P)
переменная P примет значение:
(1) [4, 3, 2, 1]
(2) [1, 2, 3, 4]
(3) [1, 3, 4]
(4) [4, 3, 1]
Эрбранов базис логической программы
animal(X) :- bird(X).
animal(zebra).
bird(swan).
выглядит следующим образом:
(1)
{animal(swan), bird(swan), animal(zebra), bird(zebra)}
(2)
{swan, zebra}
(3)
{animal(X), bird(X), bird(swan), animal(zebra)}
(4)
{animal(swan), bird(swan), animal(zebra)}
В результате вызова
string::splitStringBySeparators("Ау уу!", "!у", X, Y, Z)
переменные X, Y
и Z
примут значения:
(1)
X = "А", Y = 'у', Z = " уу!"
(2)
X = "Ау уу", Y = '!', Z = ""
(3)
X = "Ау", Y = ' ', Z = "уу!"
(4)
X = "Ау", Y = 'у', Z = "уу!"
Отметьте верное утверждение. Поиск в ширину на графе пространства состояний обычно используется:
(1) для поиска всех решений, даже если пространство велико
(2) для поиска одного из оптимальных решений
(3) если пространство состояний очень мало
(4) только если не удается найти решение поиском в глубину
В результате вызова в PIE цели
functor(X, book, 2), arg(1, X, melville), arg(2, X, "Moby-Dick")
переменная X
примет значение
(1)
melville("Moby-Dick")
(2)
book(melville("Moby-Dick"))
(3)
book(melville("Moby-Dick"))
(4)
book(_, melville, "Moby-Dick")
Сколько элементов содержит список [[1, 2, 3, 4]]?
(1) 1
(2) 2
(3) 3
(4) 4
Определение предикатов parent("Mary", "Bob").
parent("Mary", "Tom").
parent("Ann", "Mary").
grandparent(X, Y):- parent(X, Z), parent(Z, Y).
run():- grandparent(X, Y), write(X, " - ", Y), nl, fail; _ = readLine().
Укажите правильное объявление предиката
parent, grandparent
и run
имеет вид:grandparent
:
(1)
grandparent: (string, string) nondeterm (o,o) (i,o) (o,i) (i,i).
(2)
grandparent: (string, string) determ.
(3)
grandparent: (string, string) multi (o,o) nondeterm (i,o).
(4)
grandparent: (string, string) nondeterm (o,o).
Укажите предикат, который может возвращать сведения из фактов, удаляемых из внутренней базы данных:
(1)
retract
(2)
retractAll
(3)
reconsult
(4)
retractFactDb
Определение предиката num(X, _, _, X).
num(X, Z, S, Y) :- X < Z, X1 = X + S, num(X1, Z, S, Y).
Сколько решений имеет цель
num
имеет вид:
num(2, 3, 2, X)
?
(1) 2
(2) 3
(3) 1
(4) 4
Определение предиката suffix(L, L).
suffix([_ | L1], L2]) :- suffix(L1, L2).
Сколько решений имеется для цели
suffix
имеет вид:suffix([], L)
?
(1) 0
(2) 1
(3) 2
(4) 3
Определение предикатов arc(1, 3).
arc(3, 4).
cont([X | L], [Z, X | L]):- arc(X, Z), not(isMember(Z, L)).
path([[Y | L] | _], Y, [Y | L]).
path([P | PL], Y, R):- findall(P1, cont(P, P1), L1), append(L1, PL, PL1),
path(PL1, Y, R).
Предикат path реализует алгоритм
arc, cont
и path
имеет вид:
(1) поиска в глубину
(2) поиска в ширину
(3) поиска кратчайшего пути в глубину
(4) «первый лучший»
Укажите все списки, с которыми унифицируется список
[_, 2 | _]
:
(1)
[1, 2, 3, 4]
(2)
[2]
(3)
[5, 2]
(4)
[[1], [2]]
Укажите все списки, с которыми унифицируется список [_, _ | _]?
(1)
[[1], [2], [3], [4]]
(2)
[1]
(3)
[1, 2]
(4)
[1, 2, 3]
(5)
[]
В основу стандарта языка Пролог положен синтаксис
(1) Visual Prolog
(2) Turbo Prolog
(3) Edinburgh Prolog
(4) Planner
Определение предиката member(bt(leaf, X, leaf), X).
member(bt(L, _, R), X):- member(L, X); member(R, X).
Сколько решений имеет цель
member
имеет вид:
member(bt(bt(leaf, 1, leaf), 2, bt(leaf, 3, leaf)), X)
?
(1) 0
(2) 1
(3) 2
(4) 3
Пусть грамматика имеет вид:
d ::= dd | [a]d[a] | [b]
, где в квадратных скобках написаны терминальные символы. Укажите те из перечисленных ниже слов, которые из нее выводятся:
(1)
aabaa
(2)
aa
(3)
baa
(4)
abba
Проигрышная позиция в игре – это позиция,
(1) в которой игрок проиграет, как бы ни ходил его противник
(2) в которой игрок проиграет, если не знает, как ходить
(3) которая является последней в игре
(4) в которой игрок проиграет, если его противник знает, как ходить
Анонимная переменная
(1) принимает определенное значение
(2) принимает любое значение
(3) не принимает никакого значения
(4) принимает значение терма, с которым унифицируется
Отсечение используется:
(1) для поиска всех альтернативных решений
(2) для предотвращения поиска всех решений
(3) для запрета процедуры унификации
(4) для предотвращения отката после достижения цели
Знак
:=
используется в языке Visual Prolog для присваивания значений
(1) свободным переменным
(2) связанным переменным
(3) конкретизированным переменным
(4) фактам-переменным
Определение предиката go(N):- write('a'), N > 3, !, N1 = N - 1, go(N1).
go(_).
Сколько раз будет напечатан символ 'a' в результате вызова цели
go
имеет вид:
go(5)
?
(1) 2
(2) 3
(3) 4
(4) 5
Определение предиката count([], 0).
count([_], 1).
count([_, _ | T], N) :- count(T, N1), N = N1 + 2.
Какое значение примет переменная
count
имеет вид:R
в результате вызова цели count([1, 2, 3], R)
?
(1) 1
(2) 2
(3) 3
(4) 0
Определение предиката select(A, [A | L], L).
select(A, [B | L], [B | L1]):- select(A, L, L1).
Сколько решений имеет цель
select
имеет вид:
select(0, L, [1, 2, 3])
?
(1) 4
(2) 3
(3) 2
(4) 1
Программа на языке Пролог – это последовательность
(1) правил
(2) конъюнктов
(3) логических высказываний
(4) запросов
Определение предиката count(leaf, 0).
count(bt(L, _, _), X):- count(L, Y), X = Y + 1.
Какое значение примет переменная X в результате вызова цели
count
имеет вид:
count(bt(bt(leaf, 1, leaf), 2, bt(leaf, 1, leaf)), X)
?
(1) 1
(2) 2
(3) 3
(4) 7
В результате вызова
string::frontToken(" f(g( a ))", X, Y)
переменные X
и Y
примут значения:
(1)
X = "f(g(", Y = "a ))"
(2)
X = " f", Y = "(g( a ))"
(3)
X = "f(g(", Y = " a ))"
(4)
X = "f", Y = "(g( a ))"
Напишите значение, которое примет переменная
N
в результате вызова цели N = string::search("prolog", "o")
:
(1)
5
(2)
4
(3)
3
(4)
2
Наибольший общий унификатор термов
t(X, r(a, b), X)
и t(X, r(Y, b), b)
равен:
(1)
X = a, Y = b
(2)
X = Z, Y = T
(3)
X = Z, Y = a
(4)
Y = a, X = b
Программа имеет вид:
male(tom).
male(bob).
Отсечение в запросе
male(X), !, male (Y)
(1) является динамическим
(2) является зеленым
(3) является красным
(4) не используется при вычислении этого запроса
Определение предикатов lang(1, prolog).
lang(2, python) :- !.
lang(3, pascal).
print() :- lang(N, L), write(L), nl, fail.
print().
Сколько названий языков будет напечатано при вызове цели
lang
и print
имеет вид:print()
?
(1) 1
(2) 2
(3) 3
(4) 4
Определение предиката go(0).
go(N):- N > 0, N1 = N - 1, go(N1), write('a').
Сколько раз будет напечатан символ 'a' в результате вызова цели
go
имеет вид:
go(2)
?
(1) 0
(2) 1
(3) 2
(4) 3
Определение предиката count([_, H | T], C, N) :- !, C1 = C + H, count(T, C1, N).
count(_, N, N).
Какое значение примет переменная
count
имеет вид:R
в результате вызова цели count([1, 2, 3], 0, R)
?
(1) 1
(2) 2
(3) 3
(4) 6
Определение предиката subset(0, L, [], L):- !.
subset(N, [A | L], [A | S], R):- N1 = N - 1, subset(N1, L, S, R).
subset(N, [A | L], S, [A | R]):- subset(N, L, S, R).
Сколько решений имеет цель
subset
имеет вид:
subset(3, [1, 2, 3], X, Y)
?
(1) 1
(2) 3
(3) 7
(4) 8
Программа имеет вид:
parent(bob, peter).
parent(ann, bob).
parent(peter, mary).
Напишите значение, примет переменная
X
при вызове parent(ann, X)
?
(1) mary
(2) bob
(3) ann
Определение предикатов tmember(t(X, _), X).
tmember(t(_, TL), X):- member(T, TL), tmember(T, X).
member(T, [T | _]):- !.
member(T, [_ | L]):- member(T, L).
Сколько решений имеет цель
tmember
и member
имеет вид:
tmember(t(1, [t(2, [t(2, [])]), t(1, [])]), X)
?
(1) 1
(2) 2
(3) 3
(4) 4
Определение предиката scan(S) = [Tok | scan(Rest)]:- string::frontToken(S, Tok, Rest), !.
scan(_) = [].
Какое значение примет переменная
scan
имеет вид:S
в результате вызова S = scan(" The cat likes it. ")
?
(1)
S = ["The cat", "likes", "it", "."]
(2)
S = ["The", "cat", "likes", "it", "."]
(3)
S = ["The", "cat", "likes", "it"]
(4)
S = ["The", "cat", "likes", "it."]
В игре «Отгадай числа» первым ходит компьютер. Кто выиграет, если требуется угадать три числа и пользователь загадает числа 4, 1 и 2?
(1) пользователь
(2) это зависит от того, что загадал компьютер
(3) компьютер
(4) заранее нельзя определить
Программа имеет вид:
likes(ann, books).
likes(tom, baseball).
male(tom).
male(bob).
Укажите порядок нахождения решений для цели male(Y); likes(X, Y)
1) Y = bob
2) Y = tom
3) X = tom,Y = baseball
4) X = ann,Y = books
(1) 1, 2, 3, 4
(2) 4, 3, 2, 1
(3) 3, 4, 1, 2
(4) 4. 2, 1, 4, 3
Предикат parent(peter, mary).
parent(mary, ann).
parent(mary, bob).
Цель
parent
определяется следующим образом:parent(X, Y), !, parent(Y, Z)
имеет следующее количество решений:
(1) 0
(2) 1
(3) 2
(4) 3
Определение предикатов fruit(1, apple).
fruit(2, pear).
print() :- fruit(N, X), fruit(_, Y), write(X), nl, write(Y), nl, N = 2, !.
print().
Напишите название фрукта, которое будет напечатано последним в результате вызова цели
fruit
и print
имеет вид: print()
:
(1)
apple
(2)
pear
Определение предикатов parent(tom, ann).
parent(ann, bob).
anc(X, Y):- parent(X, Y).
anc(X, Z):- parent(X, Z), anc(Z, Y).
Сколько решений имеет цель
parent
и anc
имеет вид:
anc(X, ann)
?
(1) 1
(2) 2
(3) 3
(4) 4
Определение предиката member1(H, [H | _]).
member1(H, [_, _ | T]) :- member1(H, T).
Сколько решений имеет цель
member1
имеет вид:member1(X, [1, 2, 3, 4, 5])
?
(1) 1
(2) 2
(3) 3
(4) 4
Определение предикатов union([], L, L).
union([A | L1], L2, L) :- member(A, L2), !, union(L1, L2, L).
union([A | L1], L2, [A | L]) :- union(L1, L2, L).
member(X, [X | _]):- !.
member(X, [_ | L]):- member(X, L).
Какое решение имеет цель
union
и member
имеет вид:
union([4, 3, 2, 1], [1, 3, 5], L)
?
(1) [4, 3, 2, 1, 5]
(2) [4, 2, 5]
(3) [4, 2, 1, 3, 5]
(4) [4, 3, 2, 1, 1, 3, 5]
Программа имеет вид:
parent(bob, peter).
parent(bob, X):- parent(ann, X).
parent(bob, mary).
Сколько решений имеет цель
parent(bob, X)
?
(1) 0
(2) 1
(3) 2
(4) 3
Определение предикатов count(t(X, []), X):- !.
count(t(_, L), Y):- count1(L, Y).
count1([], 0).
count1([T | L], Z):- count(T, X), count1(L, Y), Z = X + Y.
Какое значение примет переменная
count
и count1
имеет вид:
S
в результате вызова цели count(t(1, [t(2, [t(2, [])]), t(1, [])]), S)
?
(1) 1
(2) 3
(3) 5
(4) 6
Объявление домена, который можно использовать в других модулях, пишется:
(1) в имплементации класса
(2) только в декларации класса
(3) в интерфейсе или в декларации класса
(4) только в интерфейсе
Одно из правил, определяющих предикат ask(A, _, [N | _]):- assert(answer(N, A)), fail. Оно соответствует следующему действию:
aks/3
, имеет вид:
(1) отменяется запись в базу данных нового факта
(2) в базу данных записывается новый факт и выполняется переход к следующему правилу
(3) в базу данных записывается новый факт, если его там не было
(4) если вычисления дойдут до этого правила, то вызов предиката ask будет неуспешным.
Определение предикатов
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):
friend
и h
имеет вид:
(1)
bob
(2)
kate
(3)
ann
(4)
person
Определение предиката color(red):- !.
color(yellow).
color(green).
Сколько решений имеет цель
color
имеет вид:color(X), !, color(Y)
?
(1) 1
(2) 2
(3) 3
(4) 4
Определение предиката print() :- fail, repeat(), write('a'), !.
print().
Сколько раз будет напечатан символ 'a' при вызове цели
print
имеет вид: print()
?
(1) ни одного раза
(2) один раз
(3) два раза
(4) более двух раз
Определение предиката f имеет вид:
f(0, 1):- !.
f(X, R):- X1 = X - 1, f(X1, R1), R = 2 * R1 + 1.
Какое значение примет переменная
Y
в результате вызова цели f(2, Y)
?
(1) 10
(2) 7
(3) 5
(4) 3
Определение предиката member(H, [H | _]):- !.
member(H, [ _ | T]) :- member(H, T).
Сколько решений имеет цель
member
имеет вид:member(X, [1, 2, 3, 4])
?
(1) 1
(2) 2
(3) 3
(4) 4
Сложность
O(n log n)
имеет алгоритм сортировки
(1) быстрой
(2) вставками
(3) слиянием
(4) пузырьком
Определение предиката
parent(tom, mary).
parent(ann, tom).
Отметьте все решения для цели
parent
имеет вид:parent(X, _), parent(_, Y)
:
(1)
X = tom, Y = mary
(2)
X = tom, Y = tom
(3)
X = tom, Y = ann
(4)
X = ann, Y = mary
(5)
X = ann, Y = ann
(6)
X = ann, Y = tom
Выберите из списка терм и соответствующий ему домен:
(1) 1, 3
(2) 2, 4
(3) 1, 4
(4) 2, 3
Отметьте все верные утверждения. В языке Visual Prolog
(1) имеются средства для отладки
(2) нет средств для отладки
(3) можно создавать модули
(4) новые пакеты можно создавать только в GUI-приложениях
Определение предиката middle(nth(I, L), I, L):- I = length(L) div 2. Напишите значение, которое примет переменная
middle
имеет вид:X
в результате вызова цели middle(X, _, ["bob", "ann", "tom", "bill"])
:
(1)
mot
(2)
lom
(3)
tom
(4)
tmo
Определение предиката
p([parent(robert, black)]).
p([parent(ann, smith), parent(thomas, smith)]).
Напишите ответ на запрос
p
имеет вид:p([parent(X, smith), _])
.
(1)
ann
(2)
robert
(3)
black
(4)
thomas
Определение предикатa color(red).
color(yellow).
color(green):- !. Цель
color
имеет вид:findall(X, color(X), L)
имеет решение:
(1)
L = [red]
(2)
L = [red, yellow]
(3)
L = [red, yellow, green]
(4)
L = [green]
Определение предикатов fruit(1, apple).
fruit(2, pear).
print() :- repeat(), fruit(N, X), write(X), nl, fruit(K, Y), write(Y), nl, N = K, !.
print().
Сколько названий фруктов будет напечатано при вызове цели
fruit
и print
имеет вид:print()
?
(1) 0
(2) 2
(3) 3
(4) 4
Определение предиката g(0, R, R):- !.
g(X, C, R):- X1 = X - 1, C1 = 3 * C, g(X1, C1, R).
Какое значение примет переменная Y в результате вызова цели
g
имеет вид:
g(2, 1, Y)
?
(1) 5
(2) 9
(3) 6
(4) 10
Определение предиката append([], L, L).
append([A | L1], L2, [A | L]) :- append(L1, L2, L).
Сколько решений имеет цель
append
имеет вид:append(L1, L2, [1, 2])
?
(1) 0
(2) 1
(3) 2
(4) 3
Цель
L = list::fold([-1, 2, -3], {(X, S) = S + X}, 0)
имеет решение:
(1) 6
(2) -2
(3) -4
(4) 0
Определение отношения father (отец) имеет вид:
father(peter, tom).
father(tom, bob).
Отношение grandfather (дедушка) можно определить следующим образом:
(1)
grandfather(X, Y) :- father(X, Y); father(Y, X)
(2)
grandfather(X, Y) :- father(X, _), father(_, Y)
(3)
grandfather(X, Y) :- father(X, Z); father(Z, Y)
(4)
grandfather(X, Y) :- father(X, Z), father(Z, Y)
Какое значение примет переменная
X
в результате вызова цели X = math::restrict(-1, 0, 3)
?
(1) -1
(2) 0
(3) 3
(4) не примет никакого значения
Определение класса interface b
properties a : integer.
end interface b
class b : b
predicates counter : () -> integer.
end class b
implement b
facts a : integer := 0.
class facts n : integer := 0.
clauses new():- n := n + 1, a := 1 - a.
counter() = n.
end implement b
Какое число будет напечатано в результате вызова цели
b
с интерфейсом b
имеет вид:X = b::new(),Y = b::new(), stdio::write(X:a + Y:a + b::counter())
?
(1) 0
(2) 7
(3) 3
(4) 4
Определение предиката p в PIE имеет вид:p(X, X) . В результате вызова
p(Y, Z), p(Z, tom)
переменная Y
примет значение
(1) не примет никакого значения
(2)
X
(3)
tom
(4)
Z
Вызов цели
not(parent(X, _))
завершается успехом, если цель parent(X, _)
(1) имеет хотя бы одно решение
(2) не имеет решений
(3) имеет ровно одно решение
(4) имеет более одного решения
Предикаты digit и tuple определяются следующим образом:digit(0).
digit(1).
digit(2).
tuple(t(X, Y)) :- digit(X), Y = -X.
Цель имеет вид:
findall(T, tuple(T), L)
. Сколько элементов содержит список L?
(1) 2
(2) 3
(3) 8
(4) 9
Начальное значение факта-переменной fruit(1, "apple").
fruit(2, "pear").
print() :- repeat(), fruit(_, X), write(X), nl, n := n + 1, n = 3, !.
print().
Напишите название фрукта, которое будет напечатано последним при вызове цели
n
равно 0. Определение предикатов fruit
и print
имеет вид:print()
:
(1)
apple
(2)
pear
Определение функции f имеет вид:
f(0, R) = R:- !.
f(X, C) = f(X - 1, C * C - 2).
Какое значение примет переменная
Y
в результате вызова цели Y = f(2, 2)
?
(1) 4
(2) 14
(3) 2
(4) 0
Определение предиката append([], L, L).
append([A | L1], L2, [A | L]) :- append(L1, L2, L).
Найти предпоследний элемент списка
append
имеет вид:L = [1, 2, 3, 4, 5]
можно с помощью цели
(1) append([_, X], _, L)
(2) append([X, _], _, L)
(3) append(_, [X, _], L)
(4) append(_, [_, X], L)
Определение предикатов arc(1, 2).
arc(1, 3).
arc(3, 4).
conn(X, X).
conn(X, Z):- arc(X, Y), conn(Y, Z).
Сколько решений имеет цель
arc
и conn
имеет вид:
conn(1, X), conn(X, 4)
?
(1) 1
(2) 2
(3) 3
(4) 4
Отношение likes определяется в виде:
likes(bob, X) :- likes(ann, X).
likes(ann, books).
likes(tom, ann).
Основным примером правила
likes(bob, X) :- likes(ann, X)
является правило
(1)
likes(bob, books) :- likes(ann, books)
(2)
likes(tom, X) :- likes(ann, X)
(3)
likes(ann, X) :- likes(bob, X)
(4)
likes(bob, ann) :- likes(ann, books)
В результате вызова
string::frontToken(" aa-bbcc", X, _)
переменная X
примет значение:
(1)
X = "aa-bbcc"
(2)
X = "aa"
(3)
X = " aa"
(4)
X = "a"
Если для решения задачи используется граф пространства состояний, то решение является
(1) его вершиной
(2) его ребром
(3) его подграфом
(4) путем, соединяющим начальное состояние с конечным
Определение предиката conc в PIE имеет вид:conc(d(A, B), d(B, C), d(A, C)). В результате вызова
conc(d([1, 2 | X], X), d([2, 3], [4]), d(L, _))
переменная L
примет значение
(1)
[1]
(2)
[1, 2, 2, 3, 4]
(3)
[1, 2, 2, 3]
(4)
[1, 4]
Определение предикатов male и parent имеет вид:
male(tom).
male(bob).
parent(tom, mary).
parent(ann, tom).
Рассмотрим цели
parent(X, _), not(not(male(X))) и not(not(male(X))), parent(X, _)
. Отметьте правильное утверждение:
(1) они имеют одинаковый набор решений
(2) одна из них имеет решение, а другая не имеет
(3) одна из них имеет два решения, а другая не имеет решений
(4) одна из них имеет два решения, а другая одно решение
Определение предикатов digit(0).
digit(1).
fruit(apple).
fruit(pear).
В каком порядке будут найдены решения для цели
digit
и fruit
имеют вид:digit(X), fruit(Y)
?
(1) 1, 3, 4, 2
(2) 1, 2, 4, 3
(3) 1, 2, 3, 4
(4) 1, 3, 2, 4
Укажите все предикаты, которые используются для добавления фактов во внутреннюю базу данных:
(1)
assert
(2)
asserta
(3)
save
(4)
assertz
Определение предиката num(X, X).
num(X, Y) :- X > 0, X1 = X - 2, num(X1, Y).
Сколько решений имеет цель
num
имеет вид:
num(5, X)
?
(1) 5
(2) 4
(3) 3
(4) 2
Определение предиката reverse([], L, L).
reverse([A | L1], L2, L) :- reverse(L1, [A | L2], L).
В результате вызова
reverse
имеет вид:reverse([1, 2], [3, 4], L)
переменная L примет значение
(1) [2, 1, 3, 4]
(2) [4, 3, 2, 1]
(3) не примет никакого значения
(4) [2, 1, 4, 3]
Определение предикатов arc(1, 2).
arc(1, 3).
arc(2, 4).
arc(3, 4).
path([X | L], X, [X | L]).
path([X | L], Y, P):- arc(X, Z), not(isMember(Z, L)), path([Z, X | L], Y, P).
Сколько решений имеет цель
arc
и path
имеет вид:
path([1], 4, P)
?
(1) 1
(2) 2
(3) 3
(4) 4
Декларативное значение логической программы
animal(X) :- bird(X).
animal(zebra).
bird(swan).
Имеет вид:
(1)
{animal(swan), bird(swan), animal(zebra), bird(zebra)}
(2)
{swan, zebra}
(3)
{animal(X), bird(X), bird(swan), animal(zebra)}
(4)
{animal(swan), bird(swan), animal(zebra)}
В результате вызова
S = string::concatWithDelimiter(["1", "000", "000"], ".")
переменная S
примет значение:
(1)
["1", ".", "000", ".", "000"]
(2)
"1.000.000."
(3)
"1000000."
(4)
"1.000.000"
Отметьте верное утверждение. Состояние в задаче о перевозке через реку полностью описывается парой, содержащей
(1) множества существ на одном берегу и на другом
(2) множества существ на одном из берегов и в лодке
(3) множество существ в лодке и местоположение лодки
(4) множество существ на левом берегу и местоположение лодки
В результате вызова в PIE цели
functor(F, animal, 1), functor(B, bird, 1), arg(1, F, B), arg(1, B, swan)
переменная F
примет значение
(1)
bird(swan)
(2)
animal(bird(swan))
(3)
animal(bird(_, swan))
(4)
animal(bird, swan)
Сколько элементов содержит список [[], [], [1], [1, 2], [1, 2, 3, 4]]?
(1) 7
(2) 4
(3) 3
(4) 5
Определение предикатов min(X, Y, X):- X < Y, !.min(X, Y, Y):- X >= Y.
run():- min(1, 3, X), write(X), nl, fail; _ = readLine().
Укажите правильное объявление предиката
min
и run
имеет вид:min
:
(1)
min: (integer, integer, integer) nondeterm (i,i,o).
(2)
min: (integer, integer, integer [out]) determ.
(3)
min: (integer, integer, integer) determ.
(4)
min: (integer, integer, integer) determ anyflow.
Укажите предикат, который удаляет все записи из внутренней базы данных:
(1)
retract
(2)
retractAll
(3)
reconsult
(4)
retractFactDb
Определение предиката num(X, _, _, X).
num(X, Z, S, Y) :- X > Z, X1 = X - S, num(X1, Z, S, Y).
Сколько решений имеет цель
num
имеет вид:
num(5, 3, 1, X)
?
(1) 1
(2) 2
(3) 3
(4) 4
Определение предиката prefix(_, []).
prefix([A | L1], [A | L2]) :- prefix(L1, L2).
Сколько решений имеется для цели
prefix
имеет вид:prefix([1], L)
?
(1) 0
(2) 1
(3) 2
(4) 3
Определение предикатов arc(1, 3).
arc(3, 4).
cont([X | L], [Z, X | L]):- arc(X, Z), not(isMember(Z, L)).
path([[Y | L] | _], Y, [Y | L]).
path([P | PL], Y, R):- findall(P1, cont(P, P1), L1), append(PL, L1, PL1),
path(PL1, Y, R).
Предикат path реализует алгоритм
arc, cont
и path
имеет вид:
(1) поиска в глубину
(2) поиска в ширину
(3) поиска кратчайшего пути в глубину
(4) «первый лучший»
Список
[_, _]
унифицируется:
(1)
со списком [[1], [2]]
(2)
с пустым списком
(3)
с любым списком
(4)
с любым непустым списком
В результате унификации списков [1, 2, 3] и [X, Y | Z] переменные получат значения
(1)
X = 1, Y = 2, Z = 3
(2)
X = 1, Y = [2], Z = 3
(3)
X = 1, Y = 2, Z = [3]
(4)
X = 1, Y = [2], Z = [3]