Главная / Программирование /
Основы программирования на языке Visual Prolog / Тест 6
Основы программирования на языке Visual Prolog - тест 6
Упражнение 1:
Номер 1
Определение предиката 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 
Номер 2
Определение предиката 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 
Номер 3
Определение предиката 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 
Упражнение 2:
Номер 1
Определение предиката 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 
Номер 2
Определение предиката 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 
Номер 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 
Упражнение 3:
Номер 1
Определение предиката member
имеет вид:member(H, [H | _]).
member(H, [_ | T]) :- member(H, T).
Сколько решений имеет цель member(X, [2, 3, 4, 5])
?
Ответ:
 (1) 1 
 (2) 2 
 (3) 3 
 (4) 4 
Номер 2
Определение предиката 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 
Номер 3
Определение предиката 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 
Упражнение 4:
Номер 1
Определение предиката member2
имеет вид:member2(H, [_, H | _]):- !.
member2(H, [_, _ | T]) :- member2(H, T).
Сколько решений имеет цель member2(X, [1, 2, 3, 4])
?
Ответ:
 (1) 1 
 (2) 2 
 (3) 3 
 (4) 4 
Номер 2
Определение предиката 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 
Номер 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 
Упражнение 5:
Номер 1
Определение предиката 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) [] 
Номер 2
Определение предиката 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] 
Номер 3
Определение предиката 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 
Упражнение 6:
Номер 1
Определение предиката 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) не примет никакого значения 
Номер 2
Определение предиката 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 
Номер 3
Определение предиката 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) 
Упражнение 7:
Номер 1
Определение предиката 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] 
Номер 2
Определение предиката 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] 
Номер 3
Определение предиката 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] 
Упражнение 8:
Номер 1
Определение предиката prefix
имеет вид:prefix(_, []).
prefix([A | L1], [A | L2]) :- prefix(L1, L2).
Сколько решений имеется для цели refix([1, 2], L)
?
Ответ:
 (1) 0 
 (2) 1 
 (3) 2 
 (4) 3 
Номер 2
Определение предиката suffix
имеет вид:suffix(L, L).
suffix([_ | L1], L2]) :- suffix(L1, L2).
Сколько решений имеется для цели suffix([], L)
?
Ответ:
 (1) 0 
 (2) 1 
 (3) 2 
 (4) 3 
Номер 3
Определение предиката prefix
имеет вид:prefix(_, []).
prefix([A | L1], [A | L2]) :- prefix(L1, L2).
Сколько решений имеется для цели prefix([1], L)
?
Ответ:
 (1) 0 
 (2) 1 
 (3) 2 
 (4) 3