Главная / Программирование /
Основы программирования на языке Visual Prolog / Тест 8
Основы программирования на языке Visual Prolog - тест 8
Упражнение 1:
Номер 1
Определение предиката 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 
Номер 2
Определение предиката 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 
Номер 3
Определение предиката 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 
Упражнение 2:
Номер 1
Определение предиката 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 
Номер 2
Определение предиката 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 
Номер 3
Определение предиката 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 
Упражнение 3:
Номер 1
Определение предикатов 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] 
Номер 2
Определение предикатов 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] 
Номер 3
Определение предикатов 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] 
Упражнение 4:
Номер 1
Предикат сортировки списка list::sort
в языке Visual Prolog определяется с помощью алгоритма сортировки
Ответ:
 (1) слиянием 
 (2) быстрой 
 (3) вставками 
 (4) пузырьком 
Номер 2
Предикат сортировки списка по заданному критерию list::sortBy
в языке Visual Prolog определяется с помощью алгоритма сортировки
Ответ:
 (1) быстрой 
 (2) вставками 
 (3) слиянием 
 (4) пузырьком 
Номер 3
Сложность O(n log n)
имеет алгоритм сортировки
Ответ:
 (1) быстрой 
 (2) вставками 
 (3) слиянием 
 (4) пузырьком 
Упражнение 5:
Номер 1
Цель L = list::map([-1, 2, -3], {(X) = -X})
имеет решение:
Ответ:
 (1) [-1, -2, -3] 
 (2) [2] 
 (3) [1, -2, 3] 
 (4) [-1, -3] 
Номер 2
Цель L = list::filter([-1, 2, -3], {(X):- X < 0})
имеет решение:
Ответ:
 (1) [-1, -2, -3] 
 (2) [2] 
 (3) [1, -2, 3] 
 (4) [-1, -3] 
Номер 3
Цель L = list::fold([-1, 2, -3], {(X, S) = S + X}, 0)
имеет решение:
Ответ:
 (1) 6 
 (2) -2 
 (3) -4 
 (4) 0 
Упражнение 6:
Номер 1
Определение предикатов 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 
Номер 2
Определение предикатов 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 
Номер 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(1, X), conn(X, 4)
?
Ответ:
 (1) 1 
 (2) 2 
 (3) 3 
 (4) 4 
Упражнение 7:
Номер 1
Определение предикатов 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) «первый лучший» 
Номер 2
Определение предикатов 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] 
Номер 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 
Упражнение 8:
Номер 1
Определение предикатов 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] 
Номер 2
Определение предикатов 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) «первый лучший» 
Номер 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) «первый лучший»