Главная / Программирование /
Основы программирования на языке Visual Prolog / Тест 10
Основы программирования на языке Visual Prolog - тест 10
Упражнение 1:
Номер 1
Определение предиката 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 
Номер 2
Определение предиката 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 
Номер 3
Определение предиката 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 
Упражнение 2:
Номер 1
Определение предиката 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 
Номер 2
Определение предиката 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 
Номер 3
Определение предиката 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 
Упражнение 3:
Номер 1
Определение предикатов 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 
Номер 2
Определение предикатов 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 
Номер 3
Определение предикатов 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 
Упражнение 4:
Номер 1
Определение предикатов 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 
Номер 2
Определение предикатов 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 
Номер 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 
Упражнение 5:
Номер 1
Выберите из списка терм и соответствующий ему домен:
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 
Номер 2
Выберите из списка терм и соответствующий ему домен:
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 
Номер 3
Выберите из списка терм и соответствующий ему домен:
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 
Упражнение 6:
Номер 1
Какое значение примет переменная X
в результате вызова цели X = math::restrict(3, 0, 1)
?
Ответ:
 (1) 1 
 (2) 0 
 (3) 3 
 (4) не примет никакого значения 
Номер 2
Какое значение примет переменная X
в результате вызова цели X = math::restrict(2, 0, 3)
?
Ответ:
 (1) 0 
 (2) 3 
 (3) 2 
 (4) не примет никакого значения 
Номер 3
Какое значение примет переменная X
в результате вызова цели X = math::restrict(-1, 0, 3)
?
Ответ:
 (1) -1 
 (2) 0 
 (3) 3 
 (4) не примет никакого значения 
Упражнение 7:
Номер 1
В результате вызова S = string::concat("ab", "bc")
переменная S
примет значение:
Ответ:
 (1) "abc"
 
 (2) "ac"
 
 (3) "abbc"
 
 (4) "a"
 
Номер 2
В результате вызова S = string::concat("aa", "bb", "cc")
переменная S
примет значение:
Ответ:
 (1) "abc"
 
 (2) "aabb"
 
 (3) "aacc"
 
 (4) "aabbcc"
 
Номер 3
В результате вызова string::frontToken(" aa-bbcc", X, _)
переменная X
примет значение:
Ответ:
 (1) X = "aa-bbcc"
 
 (2) X = "aa"
 
 (3) X = " aa"
 
 (4) X = "a"
 
Упражнение 8:
Номер 1
В результате вызова 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"
 
Номер 2
В результате вызова string::splitStringBySeparators("Ау уу!", "!у", X, Y, Z)
переменные X, Y
и Z
примут значения:
Ответ:
 (1) X = "А", Y = 'у', Z = " уу!"
 
 (2) X = "Ау уу", Y = '!', Z = ""
 
 (3) X = "Ау", Y = ' ', Z = "уу!"
 
 (4) X = "Ау", Y = 'у', Z = "уу!"
 
Номер 3
В результате вызова S = string::concatWithDelimiter(["1", "000", "000"], ".")
переменная S
примет значение:
Ответ:
 (1) ["1", ".", "000", ".", "000"]
 
 (2) "1.000.000."
 
 (3) "1000000."
 
 (4) "1.000.000"