Главная / Программирование / Основы программирования на языке Visual Prolog

Основы программирования на языке Visual Prolog - ответы на тесты Интуит

Правильные ответы выделены зелёным цветом.
Все ответы: В курсе изучается логическое программирование и язык Пролог. В качестве реализации языка Пролог используется современная версия языка Visual Prolog. Предназначен для начинающих.
Логическое программирование в широком смысле это:
(1) программирование на хорновских дизъюнктах
(2) описание задачи на некотором логическом языке и ее решение посредством вывода в некоторой формальной системе
(3) набор инструкций определенного алгоритма из логики высказываний
(4) набор инструкций определенного алгоритма из логики предикатов
Определение предиката member имеет вид: member(bt(_, X, _), X). member(bt(L, _, R), X):- member(L, X); member(R, X). Сколько решений имеет цель 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 имеет вид: go(2):- !. go(N):- write('a'), N1 = N - 1, go(N1). Сколько раз будет напечатан символ 'a' в результате вызова цели go(5)?
(1) 0
(2) 1
(3) 2
(4) 3
Определение предиката count имеет вид: count([_, _ | T], N) :- !, count(T, N1), N = N1 + 1. count(_, 1). Какое значение примет переменная R в результате вызова цели count([1, 2, 3], R)?
(1) 1
(2) 2
(3) 3
(4) 0
Определение предиката select имеет вид: select(A, [A | L], L). select(A, [B | L], [B | L1]):- select(A, L, L1). Сколько решений имеет цель select(X, [1, 2, 2], L) ?
(1) 0
(2) 1
(3) 2
(4) 3
Факт – это
(1) правило без заголовка
(2) правило без тела
(3) любое правило программы
(4) любое логическое высказывание
Определение предиката count имеет вид: count(leaf, 0). count(bt(L, _, R), X):- count(L, Y), count(R, Z), X = Y + Z + 1. Какое значение примет переменная X в результате вызова цели 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 и print имеет вид:lang(1, prolog). lang(2, python). lang(3, pascal). print() :- lang(N, L), write(L), nl, N = 2, !. print(). Сколько названий языков будет напечатано при вызове цели print()?
(1) 0
(2) 1
(3) 2
(4) 3
Определение предиката go имеет вид: go(2):- write('a'), fail. go(N):- N > 1, write('a'), N1 = N - 1, go(N1). go(_). Сколько раз будет напечатан символ 'a' в результате вызова цели go(4)?
(1) 3
(2) 4
(3) 5
(4) 6
Определение предиката count имеет вид:count([H | T], C, N) :- C1 = C + H, count(T, C1, N). count([], N, N). Какое значение примет переменная R в результате вызова цели count([2, 3, 4], 0, R)?
(1) 2
(2) 3
(3) 5
(4) 9
Определение предиката subset имеет вид: subset([], []). subset([A | L], [A | S]):- subset(L, S). subset([_ | L], S):- subset(L, S). Сколько решений имеет цель 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 и member имеет вид: tmember(t(X, _), X). tmember(t(_, TL), X):- member(T, TL), tmember(T, X). member(T, [T | _]). member(T, [_ | L]):- member(T, L). Сколько решений имеет цель tmember(t(1, [t(2, [t(2, [])]), t(1, [])]), X) ?
(1) 1
(2) 2
(3) 3
(4) 4
Определение предиката scan имеет вид:scan(S) = [Tok | scan(Rest)]:- string::frontToken(S, Tok, Rest), !. 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 определяется следующим образом: likes(mary, books). likes(peter, mary). likes(mary, peter).Цель likes(X, Y), !, likes(Y, Z) имеет следующее количество решений:
(1) 0
(2) 1
(3) 2
(4) 3
Определение предикатов fruit и print имеет вид:fruit(1, apple). fruit(2, pear). print() :- fruit(_, X), write(X), nl, fruit(_, Y), write(Y), nl, fail. print(). Напишите название фрукта, которое будет напечатано третьим в результате вызова цели print():
(1) apple
(2) pear
Определение предикатов parent и anc имеет вид: parent(tom, ann). parent(ann, bob). anc(X, Y):- parent(X, Y). anc(X, Z):- parent(X, Z), anc(Z, Y). Сколько решений имеет цель anc(X, Y)?
(1) 1
(2) 2
(3) 3
(4) 4
Определение предиката member имеет вид:member(H, [H | _]). member(H, [_ | T]) :- member(H, T). Сколько решений имеет цель member(X, [2, 3, 4, 5])?
(1) 1
(2) 2
(3) 3
(4) 4
Определение предикатов intersection и member имеет вид: 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([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 и count1 имеет вид: 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(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 и 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):
(1) bob
(2) 19
(3) kate
(4) person
Определение предикатa digit имеет вид:digit(0). digit(1):- !. digit(2). Сколько решений имеет цель digit(X), digit(Y), !, digit(Z)?
(1) 0
(2) 1
(3) 2
(4) 3
Определение предиката print имеет вид:print() :- repeat(), write('a'), !. print(). Сколько раз будет напечатан символ 'a' при вызове цели print()?
(1) ни одного раза
(2) один раз
(3) два раза
(4) более двух раз
Определение предиката f имеет вид: f(0, 3):- !. f(X, R):- X1 = X - 1, f(X1, R1), R = R1 + 2. Какое значение примет переменная Y в результате вызова цели f(2, Y)?
(1) 3
(2) 5
(3) 7
(4) 8
Определение предиката member2 имеет вид:member2(H, [_, H | _]):- !. member2(H, [_, _ | T]) :- member2(H, T). Сколько решений имеет цель 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
Выберите из списка терм и соответствующий ему домен:
  • t(1, t(2, empty, empty), empty)
  • t(nil, 1, t(nil, 2, nil))
  • tree = t(integer, tree*).
  • bintree{Elem} = t(bintree{Elem}, Elem, bintree{Elem}); nil.
  • (1) 1, 3
    (2) 2, 4
    (3) 1, 4
    (4) 2, 3
    В языке Visual Prolog классы могут порождать объекты
    (1) тогда и только тогда, когда они имеют интерфейс
    (2) когда они не имеют интерфейса
    (3) независимо от того, имеют они интерфейс или нет
    (4) классы не могут порождать объекты в Visual Prolog
    Определение предикатов pet и unif имеет вид:pet(h(C, N, Pt, D, S), P) = h(C, N, P, D, S):- unif(Pt, P). unif(X, Y):- X = empty, !; Y = X. Вызов <…>, House = pet(h(empty, empty, Pt, empty, empty), P) успешен
    (1) только если P = Pt
    (2) если Pt = empty или P = Pt
    (3) только если Pt = empty
    (4) всегда
    Определение предиката p имеет вид: p([parent(robert, jackson)]). p([parent(ann, smith), parent(thomas, smith)]). Напишите ответ на запрос p([_, parent(_, X)]):
    (1) smith
    (2) robert
    (3) thomas
    (4) jackson
    Определение предикатa color имеет вид:color(red). color(yellow). color(yellow) :- !. color(green). Цель findall(X, color(X), L) имеет решение:
    (1) L = [red]
    (2) L = [red, yellow]
    (3) L = [red, yellow, yellow]
    (4) L = [red, yellow, green]
    Определение предикатов 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()?
    (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 имеет вид:append([], L, L). append([A | L1], L2, [A | L]) :- append(L1, L2, L). Какое значение примет переменная L в результате вызова 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) не примет никакого значения
    Определение класса b с интерфейсом b имеет вид: 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 Какое число будет напечатано в результате вызова цели 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 в PIE имеет вид:member(H, [H | _]). member(H, [_ | T]):- member(H, T). Цель L = [_, _], member(1, L) имеет в PIE следующий набор решений:
    (1) L = [1, _]; L = [_, 1]
    (2) L = [1]
    (3) Эта цель не имеет решений
    (4) L = [1, 1]
    Определение предикатов likes и male выглядит следующим образом: male(peter). male(bob). likes(peter, bycicle). Напишите решение для цели male(Y), not(likes(Y, _)):
    (1) peter
    (2) bob
    (3) bycicle
    Предикаты digit и triple определяются следующим образом:digit(0). digit(1). triple(t(X, Y, Z)) :- digit(X), digit(Y), digit(Z). Цель имеет вид: findall(T, triple(T), L). Сколько элементов содержит список L?
    (1) 2
    (2) 3
    (3) 8
    (4) 9
    Начальное значение факта-переменной n равно 0. Определение предикатов fruit и print имеет вид:fruit(1, "apple"). fruit(2, "pear"). print() :- repeat(), fruit(_, X), n := n + 1, write(X), nl, n = 4, !. 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 имеет вид:append([], L, L). append([A | L1], L2, [A | L]) :- append(L1, L2, L). Какое значение примет переменная L в результате вызова append(L, [_, 2], [1, 2, 3])?
    (1) [1]
    (2) [1, 2]
    (3) [3]
    (4) не примет никакого значения
    Определение предикатов arc и conn имеет вид: arc(1, 2). arc(1, 3). arc(3, 4). conn(X, X). conn(X, Z):- arc(X, Y), conn(Y, Z). Сколько решений имеет цель 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 в PIE имеет вид:conc(d(A, B), d(B, C), d(A, C)). В результате вызова 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 и parent имеет вид: male(tom). male(bob). parent(tom, mary). parent(tom, ann). Одинаковое ли количество решений имеют цели male(X), parent(X, _) и male(X), not(not(parent(X, _))):
    (1) одинаковое
    (2) не одинаковое
    (3) одна из этих целей не имеет смысла в Прологе
    (4) одна из этих целей не имеет решений
    Определение предиката digit имеет вид:digit(0). digit(1).В каком порядке будут найдены решения для цели digit(X), digit(Y)?
  • X = 0, Y = 0
  • X = 1, Y = 1
  • X = 0, Y = 1
  • X = 1, Y = 0
  • (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 имеет вид: num(X, X). num(X, Y) :- X < 2, X1 = X + 1, num(X1, Y). Сколько решений имеет цель num(-1, X)?
    (1) 2
    (2) 3
    (3) 4
    (4) 5
    Определение предиката reverse имеет вид:reverse([], L, L). reverse([A | L1], L2, L) :- reverse(L1, [A | L2], L). В результате вызова reverse([1, 2], [3], L) переменная L примет значение
    (1) [3, 2, 1]
    (2) [2, 1, 3]
    (3) не примет никакого значения
    (4) [1, 2, 3]
    Определение предикатов arc и path имеет вид: 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 реализует алгоритм
    (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, grandparent и run имеет вид: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 объявлен в разделе 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 имеет вид: num(X, _, X). num(X, C, Y) :- X > 0, X1 = X - C, num(X1, C, Y). Сколько решений имеет цель num(3, 2, X)?
    (1) 2
    (2) 3
    (3) 4
    (4) 5
    Определение предиката prefix имеет вид:prefix(_, []). prefix([A | L1], [A | L2]) :- prefix(L1, L2). Сколько решений имеется для цели refix([1, 2], L)?
    (1) 0
    (2) 1
    (3) 2
    (4) 3
    Определение предикатов arc, cont и path имеет вид: 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). Укажите решение для цели 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 имеет вид: member(bt(_, X, _), X):- !. member(bt(L, _, R), X):- member(L, X); member(R, X). Сколько решений имеет цель 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 имеет вид: go(N):- N > 1, !, write('a'), N1 = N - 1, go(N1). go(_). Сколько раз будет напечатан символ 'a' в результате вызова цели go(5)?
    (1) 2
    (2) 3
    (3) 4
    (4) 5
    Определение предиката count имеет вид:count([], 0). count([_ | T], N) :- count(T, N1), N = N1 + 1. Какое значение примет переменная R в результате вызова цели count([1, 2, 3], R)?
    (1) 1
    (2) 2
    (3) 3
    (4) 0
    Определение предиката select имеет вид: select(A, [A | L], L). select(A, [B | L], [B | L1]):- select(A, L, L1), A <> B. Сколько решений имеет цель select(X, [2, 1, 2], L) ?
    (1) 0
    (2) 1
    (3) 2
    (4) 3
    Запрос – это
    (1) любое правило программы
    (2) любой факт
    (3) правило без заголовка
    (4) правило без тела
    Определение предиката count имеет вид: count(leaf, 0). count(bt(leaf, _, leaf), 1):- !. count(bt(L, _, R), X):- count(L, Y), count(R, Z), X = Y + Z. Какое значение примет переменная X в результате вызова цели 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 и print имеет вид:lang(1, prolog). lang(2, python). lang(3, pascal). print() :- lang(N, L), write(L), nl, fail. print(). Сколько названий языков будет напечатано при вызове цели print()?
    (1) 1
    (2) 2
    (3) 3
    (4) 6
    Определение предиката go имеет вид: go(2):- fail. go(N):- N > 1, write('a'), N1 = N - 1, go(N1). go(_). Сколько раз будет напечатан символ 'a' в результате вызова цели go(4)?
    (1) 3
    (2) 2
    (3) 0
    (4) 4
    Определение предиката 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)?
    (1) 1
    (2) 2
    (3) 6
    (4) 9
    Определение предиката subset имеет вид: subset(0, [], []):- !. subset(N, [A | L], [A | S]):- N1 = N - 1, subset(N1, L, S). subset(N, [_ | L], S):- subset(N, L, S). Сколько решений имеет цель 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 и member имеет вид: tmember(t(X, []), X). tmember(t(_, TL), X):- member(T, TL), tmember(T, X). member(T, [T | _]). member(T, [_ | L]):- member(T, L). Сколько решений имеет цель tmember(t(1, [t(2, [t(2, [])]), t(1, [])]), X) ?
    (1) 1
    (2) 2
    (3) 3
    (4) 4
    Определение предиката scan имеет вид:scan(S) = [Tok | scan(Rest)]:- string::frontToken(S, Tok, Rest), !. 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 определяется следующим образом:parent(peter, mary). parent(mary, ann). parent(mary, bob).Цель !, parent(X, Y), parent(Y, Z) имеет следующее количество решений:
    (1) 0
    (2) 1
    (3) 2
    (4) 3
    Определение предикатов fruit и print имеет вид:fruit(1, apple). fruit(2, pear). print() :- fruit(_, X), fruit(_, Y), write(X), nl, write(Y), nl, fail. print(). Напишите название фрукта, которое будет напечатано третьим в результате вызова цели print():
    (1) apple
    (2) pear
    Определение предикатов parent и anc имеет вид: parent(tom, ann). parent(ann, bob). anc(X, Y):- parent(X, Y). anc(X, Z):- parent(X, Z), anc(Z, Y). Сколько решений имеет цель anc(tom, X)?
    (1) 1
    (2) 2
    (3) 3
    (4) 4
    Определение предиката member2 имеет вид:member2(H, [_, H | _]). member2(H, [_, _ | T]) :- member2(H, T). Сколько решений имеет цель member2(X, [1, 2, 3, 4, 5])?
    (1) 1
    (2) 2
    (3) 3
    (4) 4
    Определение предикатов difference и member имеет вид: 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([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 и count1 имеет вид: count(t(X, L), Z):- count1(L, Y), Z = Y + X. count1([], 0). count1([T | _], Z):- count(T, Z). Какое значение примет переменная S в результате вызова цели count(t(1, [t(2, [t(2, [])]), t(1, [])]), S) ?
    (1) 1
    (2) 3
    (3) 5
    (4) 6
    Определение предиката пишется:
    (1) в имплементации класса
    (2) в декларации класса
    (3) в декларации класса и в имплементации класса
    (4) в декларации класса-наследника
    Признак N присутствует, если в базе данных имеется факт answer(N, 1), и отсутствует, если в ней имеется факт answer(N, 0). Определение предиката correct имеет вид:correct(L):- answer(N, 1), not(isMember(N, L)), !, fail; succeed(). Предикат истинен, если
    (1) имеются все необходимые признаки
    (2) имеется признак, которого нет в списке L
    (3) нет признаков, которых не было бы в списке L
    (4) никаких признаков не обнаружено
    Определение предикатов 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):
    (1) bob
    (2) 19
    (3) kate
    (4) person
    Определение предиката color имеет вид:color(red). color(yellow) :- !. color(green). Сколько решений имеет цель color(X), color(Y)?
    (1) 1
    (2) 2
    (3) 3
    (4) 4
    Определение предиката print имеет вид:print() :- write('a'), repeat(), !. print(). Сколько раз будет напечатан символ 'a' при вызове цели 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 имеет вид:member1(H, [H, _ | _]). member1(H, [_, _ | T]) :- !, member1(H, T). Сколько решений имеет цель 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
    Выберите из списка терм и соответствующий ему домен:
  • t(1, [t(2, []), t(3, []), t(4, [])])
  • t(nil, 1, t(nil, 2, nil))
  • tree{A} = t(A, tree{A}*).
  • tree = t(integer, tree, tree); nil.
  • (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 имеет вид:color(red):- !. color(yellow). color(green). Цель findall(X, color(X), L) имеет решение:
    (1) L = []
    (2) L = [red]
    (3) L = [red, yellow]
    (4) L = [red, yellow, green]
    Определение предикатов 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()?
    (1) 2
    (2) 3
    (3) 4
    (4) 5
    Определение предиката g имеет вид: g(0, R, R):- !. g(X, C, R):- X1 = X - 1, C1 = 2 * C + 1, g(X1, C1, R). Какое значение примет переменная Y в результате вызова цели g(2, 2, Y)?
    (1) 5
    (2) 10
    (3) 11
    (4) 12
    Определение предиката append имеет вид:append([], L, L). append([A | L1], L2, [A | L]) :- append(L1, L2, L). Какое значение примет переменная L в результате вызова 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) не примет никакого значения
    Определение класса b с интерфейсом b имеет вид:interface b properties a : integer. end interface b class b : b end class b implement b facts a : integer := 0. end implement 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 и female выглядит следующим образом: married(tom, mary). female(mary). female(ann). Напишите решение для цели 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 и print имеет вид:fruit(1, "apple"). fruit(2, "pear"). print() :- repeat(), n := n + 1, fruit(_, X), write(X), nl, n = 2, !. 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 имеет вид: append([], L, L). append([A | L1], L2, [A | L]) :- append(L1, L2, L). Сколько решений имеет цель append(L, [_], [1, 2, 3])?
    (1) 0
    (2) 1
    (3) 2
    (4) 3
    Определение предикатов arc и conn имеет вид: arc(1, 2). arc(1, 3). arc(3, 4). conn(X, X). conn(X, Z):- arc(X, Y), conn(Y, Z). Сколько решений имеет цель 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 в PIE имеет вид:conc(d(A, B), d(B, C), d(A, C)). В результате вызова 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 имеет вид:digit(1). digit(0). В каком порядке будут найдены решения для цели digit(X), digit(Y)?
  • X = 0, Y = 0
  • X = 1, Y = 1
  • X = 0, Y = 1
  • X = 1, Y = 0
  • (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 имеет вид: num(X, X). num(X, Y) :- X > 0, X1 = X - 1, num(X1, Y). Сколько решений имеет цель num(4, X)?
    (1) 2
    (2) 3
    (3) 4
    (4) 5
    Определение предиката reverse имеет вид:reverse([], L, L). reverse([A | L1], L2, L) :- reverse(L1, [A | L2], L). В результате вызова reverse([1, 2, 2], [], L) переменная L примет значение
    (1) [2, 1, 2]
    (2) [1, 2, 2]
    (3) [1, 2, 2]
    (4) [2, 2, 1]
    Определение предикатов arc и path имеет вид: 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). В результате вызова цели 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, grandparent и run имеет вид: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(). Укажите правильное объявление предиката 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 имеет вид: num(X, _, _, X). num(X, Z, S, Y) :- X < Z, X1 = X + S, num(X1, Z, S, Y). Сколько решений имеет цель num(2, 3, 2, X)?
    (1) 2
    (2) 3
    (3) 1
    (4) 4
    Определение предиката suffix имеет вид:suffix(L, L). suffix([_ | L1], L2]) :- suffix(L1, L2). Сколько решений имеется для цели suffix([], L)?
    (1) 0
    (2) 1
    (3) 2
    (4) 3
    Определение предикатов arc, cont и path имеет вид: 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 реализует алгоритм
    (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 имеет вид: member(bt(leaf, X, leaf), X). member(bt(L, _, R), X):- member(L, X); member(R, X). Сколько решений имеет цель 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 имеет вид: go(N):- write('a'), N > 3, !, N1 = N - 1, go(N1). go(_). Сколько раз будет напечатан символ 'a' в результате вызова цели go(5)?
    (1) 2
    (2) 3
    (3) 4
    (4) 5
    Определение предиката count имеет вид:count([], 0). count([_], 1). count([_, _ | T], N) :- count(T, N1), N = N1 + 2. Какое значение примет переменная R в результате вызова цели count([1, 2, 3], R)?
    (1) 1
    (2) 2
    (3) 3
    (4) 0
    Определение предиката select имеет вид: select(A, [A | L], L). select(A, [B | L], [B | L1]):- select(A, L, L1). Сколько решений имеет цель select(0, L, [1, 2, 3]) ?
    (1) 4
    (2) 3
    (3) 2
    (4) 1
    Программа на языке Пролог – это последовательность
    (1) правил
    (2) конъюнктов
    (3) логических высказываний
    (4) запросов
    Определение предиката count имеет вид: count(leaf, 0). count(bt(L, _, _), X):- count(L, Y), X = Y + 1. Какое значение примет переменная X в результате вызова цели 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 и print имеет вид:lang(1, prolog). lang(2, python) :- !. lang(3, pascal). print() :- lang(N, L), write(L), nl, fail. print(). Сколько названий языков будет напечатано при вызове цели print()?
    (1) 1
    (2) 2
    (3) 3
    (4) 4
    Определение предиката go имеет вид: go(0). go(N):- N > 0, N1 = N - 1, go(N1), write('a'). Сколько раз будет напечатан символ 'a' в результате вызова цели go(2)?
    (1) 0
    (2) 1
    (3) 2
    (4) 3
    Определение предиката count имеет вид:count([_, H | T], C, N) :- !, C1 = C + H, count(T, C1, N). count(_, N, N). Какое значение примет переменная R в результате вызова цели count([1, 2, 3], 0, R)?
    (1) 1
    (2) 2
    (3) 3
    (4) 6
    Определение предиката subset имеет вид: 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(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 и member имеет вид: tmember(t(X, _), X). tmember(t(_, TL), X):- member(T, TL), tmember(T, X). member(T, [T | _]):- !. member(T, [_ | L]):- member(T, L). Сколько решений имеет цель tmember(t(1, [t(2, [t(2, [])]), t(1, [])]), X) ?
    (1) 1
    (2) 2
    (3) 3
    (4) 4
    Определение предиката scan имеет вид:scan(S) = [Tok | scan(Rest)]:- string::frontToken(S, Tok, Rest), !. 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 определяется следующим образом:parent(peter, mary). parent(mary, ann). parent(mary, bob). Цель parent(X, Y), !, parent(Y, Z) имеет следующее количество решений:
    (1) 0
    (2) 1
    (3) 2
    (4) 3
    Определение предикатов fruit и print имеет вид: fruit(1, apple). fruit(2, pear). print() :- fruit(N, X), fruit(_, Y), write(X), nl, write(Y), nl, N = 2, !. print(). Напишите название фрукта, которое будет напечатано последним в результате вызова цели print():
    (1) apple
    (2) pear
    Определение предикатов parent и anc имеет вид: parent(tom, ann). parent(ann, bob). anc(X, Y):- parent(X, Y). anc(X, Z):- parent(X, Z), anc(Z, Y). Сколько решений имеет цель anc(X, ann)?
    (1) 1
    (2) 2
    (3) 3
    (4) 4
    Определение предиката member1 имеет вид: member1(H, [H | _]). member1(H, [_, _ | T]) :- member1(H, T). Сколько решений имеет цель member1(X, [1, 2, 3, 4, 5])?
    (1) 1
    (2) 2
    (3) 3
    (4) 4
    Определение предикатов union и member имеет вид: 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([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 и count1 имеет вид: 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. Какое значение примет переменная S в результате вызова цели count(t(1, [t(2, [t(2, [])]), t(1, [])]), S) ?
    (1) 1
    (2) 3
    (3) 5
    (4) 6
    Объявление домена, который можно использовать в других модулях, пишется:
    (1) в имплементации класса
    (2) только в декларации класса
    (3) в интерфейсе или в декларации класса
    (4) только в интерфейсе
    Одно из правил, определяющих предикат aks/3, имеет вид:ask(A, _, [N | _]):- assert(answer(N, A)), fail. Оно соответствует следующему действию:
    (1) отменяется запись в базу данных нового факта
    (2) в базу данных записывается новый факт и выполняется переход к следующему правилу
    (3) в базу данных записывается новый факт, если его там не было
    (4) если вычисления дойдут до этого правила, то вызов предиката ask будет неуспешным.
    Определение предикатов 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):
    (1) bob
    (2) kate
    (3) ann
    (4) person
    Определение предиката color имеет вид:color(red):- !. color(yellow). color(green). Сколько решений имеет цель color(X), !, color(Y)?
    (1) 1
    (2) 2
    (3) 3
    (4) 4
    Определение предиката print имеет вид: print() :- fail, repeat(), write('a'), !. print(). Сколько раз будет напечатан символ 'a' при вызове цели 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 имеет вид:member(H, [H | _]):- !. member(H, [ _ | T]) :- member(H, T). Сколько решений имеет цель member(X, [1, 2, 3, 4])?
    (1) 1
    (2) 2
    (3) 3
    (4) 4
    Сложность O(n log n) имеет алгоритм сортировки
    (1) быстрой
    (2) вставками
    (3) слиянием
    (4) пузырьком
    Определение предиката parent имеет вид: parent(tom, mary). parent(ann, tom). Отметьте все решения для цели 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
    Выберите из списка терм и соответствующий ему домен:
  • t(nil, 1, t(nil, 2, nil))
  • t(1, [t(2, []), t(3, []), t(4, [])])
  • tree = t(string, tree*).
  • tree = t(tree, integer, tree); nil.
  • (1) 1, 3
    (2) 2, 4
    (3) 1, 4
    (4) 2, 3
    Отметьте все верные утверждения. В языке Visual Prolog
    (1) имеются средства для отладки
    (2) нет средств для отладки
    (3) можно создавать модули
    (4) новые пакеты можно создавать только в GUI-приложениях
    Определение предиката middle имеет вид:middle(nth(I, L), I, L):- I = length(L) div 2. Напишите значение, которое примет переменная X в результате вызова цели middle(X, _, ["bob", "ann", "tom", "bill"]):
    (1) mot
    (2) lom
    (3) tom
    (4) tmo
    Определение предиката p имеет вид: p([parent(robert, black)]). p([parent(ann, smith), parent(thomas, smith)]). Напишите ответ на запрос p([parent(X, smith), _]).
    (1) ann
    (2) robert
    (3) black
    (4) thomas
    Определение предикатa color имеет вид:color(red). color(yellow). color(green):- !.Цель findall(X, color(X), L) имеет решение:
    (1) L = [red]
    (2) L = [red, yellow]
    (3) L = [red, yellow, green]
    (4) L = [green]
    Определение предикатов 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()?
    (1) 0
    (2) 2
    (3) 3
    (4) 4
    Определение предиката g имеет вид: g(0, R, R):- !. g(X, C, R):- X1 = X - 1, C1 = 3 * C, g(X1, C1, R). Какое значение примет переменная Y в результате вызова цели g(2, 1, Y)?
    (1) 5
    (2) 9
    (3) 6
    (4) 10
    Определение предиката append имеет вид:append([], L, L). append([A | L1], L2, [A | L]) :- append(L1, L2, L). Сколько решений имеет цель 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) не примет никакого значения
    Определение класса b с интерфейсом b имеет вид: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 Какое число будет напечатано в результате вызова цели 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
    Начальное значение факта-переменной n равно 0. Определение предикатов fruit и print имеет вид:fruit(1, "apple"). fruit(2, "pear"). print() :- repeat(), fruit(_, X), write(X), nl, n := n + 1, n = 3, !. 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 имеет вид: append([], L, L). append([A | L1], L2, [A | L]) :- append(L1, L2, L). Найти предпоследний элемент списка L = [1, 2, 3, 4, 5] можно с помощью цели
    (1) append([_, X], _, L)
    (2) append([X, _], _, L)
    (3) append(_, [X, _], L)
    (4) append(_, [_, X], L)
    Определение предикатов arc и conn имеет вид: arc(1, 2). arc(1, 3). arc(3, 4). conn(X, X). conn(X, Z):- arc(X, Y), conn(Y, Z). Сколько решений имеет цель 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 и fruit имеют вид:digit(0). digit(1). fruit(apple). fruit(pear). В каком порядке будут найдены решения для цели digit(X), fruit(Y)?
  • X = 0, Y = apple
  • X = 1, Y = pear
  • X = 0, Y = pear
  • X = 1, Y = apple
  • (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 имеет вид: num(X, X). num(X, Y) :- X > 0, X1 = X - 2, num(X1, Y). Сколько решений имеет цель num(5, X)?
    (1) 5
    (2) 4
    (3) 3
    (4) 2
    Определение предиката reverse имеет вид:reverse([], L, L). reverse([A | L1], L2, L) :- reverse(L1, [A | L2], L). В результате вызова reverse([1, 2], [3, 4], L) переменная L примет значение
    (1) [2, 1, 3, 4]
    (2) [4, 3, 2, 1]
    (3) не примет никакого значения
    (4) [2, 1, 4, 3]
    Определение предикатов arc и path имеет вид: 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). Сколько решений имеет цель 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 и run имеет вид:min(X, Y, X):- X < Y, !.min(X, Y, Y):- X >= Y. run():- min(1, 3, X), write(X), nl, fail; _ = readLine(). Укажите правильное объявление предиката 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 имеет вид: num(X, _, _, X). num(X, Z, S, Y) :- X > Z, X1 = X - S, num(X1, Z, S, Y). Сколько решений имеет цель num(5, 3, 1, X)?
    (1) 1
    (2) 2
    (3) 3
    (4) 4
    Определение предиката prefix имеет вид:prefix(_, []). prefix([A | L1], [A | L2]) :- prefix(L1, L2). Сколько решений имеется для цели prefix([1], L)?
    (1) 0
    (2) 1
    (3) 2
    (4) 3
    Определение предикатов arc, cont и path имеет вид: 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 реализует алгоритм
    (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]