Файл: Учебные пособия по логическому и функциональ ному программированию В. М. Зюзькова. В пособие внесены изменения в 2020 г.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 05.12.2023

Просмотров: 164

Скачиваний: 9

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Вопрос 26
Пролог. Пусть мы определили некоторый предикат p(X, Y), для которого X является входным параметром, а Y - выходным параметром.
Можем ли мы вызывать этот предикат в обратной ситуации, когда Y - кон- кретизованный аргумент, а X - переменная?
Варианты ответов
1) да,
2) нет,
3) достаточно часто, зависит от конкретного предиката.
Введите номер правильного ответа.
Вопрос 27
Пусть имеется прологовская программа p(1). p(2):-!. p(3).
Какие будут конкретизации пролог-системы на следующий запрос?

48
?- p(X).
Введите последовательность конкретизаций переменной X - строку символов из чисел разделенных пробелами.
Вопрос 28
Пусть имеется прологовская программа p(1). p(2):-!. p(3).
Какие будут конкретизации пролог-системы на следующий запрос?
?- p(X),p(Y).
Варианты ответов:
1) X=1, Y=1 2) X=1, Y=1; X=1, Y=2; X=2, Y=1; X=2, Y=2 3) X=1, Y=1; X=1, Y= 2
Введите номер правильного ответа.
Вопрос 29
Пролог. Дано определение предиката 'различны'(X, Y):- !, fail.
'различны'(X, Y). который выполняется, если X и Y не совпадают.
В каком смысле понимаются "различны":
1) X и Y не совпадают буквально;
2) X и Y не унифицируемы;
3) значения арифметических выражений X и Y не равны?
Введите номер правильного ответа.
Вопрос 30
В языке Пролог имеются следующие дополнительные средства управления выполнением программы:
1) предикат отсечения;
2) предикат fail;
3) предикат true;
4) предикат отрицания not;
5) предикат call;
6) предикат repeat.
Какие средства управления могут менять декларативную семантику програм- мы и потенциально опасны?
Введите через пробел номера предикатов (в порядке возрастания), которые вы считаете ответами на вопрос.

49
Вопрос 31
Какие следующие предикаты относятся к "чистому" Прологу, т. е. описыва- ются в рамках логической теории предикатов первого порядка?
1) отсечение;
2) fail;
3) true;
4) отрицание not;
5) call;
6) repeat;
7) findall;
8) assert;
9) retract.
Введите через пробел номера предикатов (в порядке возрастания), которые вы считаете ответами на вопрос.
Вопрос 32
Следующий текст взят из учебника по Прологу.
"Внесение изменений в программу при помощи предикатов … может сделать поведение программы значительно менее понятным. В частности, одна и та же программа на одни и те же вопросы будет отвечать по-разному в разные моменты времени. В таких случаях, если мы захотим повторно воспроизвести исходное поведение программы, нам придется предварительно убедиться в том, что ее исходное состояние, нарушенное при обращении к предикатам …, полностью восстановлено.
О каких предикатах из следующего списка идет речь?
1) отсечение;
2) fail;
3) true;
4) отрицание not;
5) call;
6) repeat;
7) findall;
8) assert;
9) retract.
Введите через пробел номера предикатов (в порядке возрастания), которые вы считаете ответами на вопрос.
Вопрос 33
Пролог. Последовательность чисел Фибоначчи имеет вид
1, 1, 2, 3, 5, 8, 13,…
Каждый член последовательности, за исключением первых двух, представля- ет собой сумму предыдущих двух членов. Какой метод программирования


50 позволяет написать предикат fib(N, F), эффективно (т. е. линейно по времени) вычисляющий N-ое число Фибоначчи F?
Варианты ответов:
1) использование запоминающих функций;
2) такого метода нет, рекурсия всегда не эффективна;
3) использование отсечений;
4) изменение порядка целей и предложений;
5) использование накапливающих параметров.
Введите через пробел номера ответов (в порядке возрастания), которые вы считаете правильными.
Вопрос 34
Пролог. Пусть предикат умножения двух натуральных чисел p(+M, +N, ?R) определен следующим образом p(0,_,0). p(_,0,0). p(X,1,X). p(X,N,R):- N>0, N1 is N-1, p(X,N1,R1), R is R1+X.
Сколько ответов даст вызов
?- p(0,2,X).
1) один ответ X=0;
2) один неправильный ответ;
3) два правильных ответа;
4) три правильных ответа;
5) программа зациклится;
6) более трех правильных ответов.
Введите номер правильного ответа.
Вопрос 35
Пролог. Пусть предикат перемножения всех натуральных чисел от 1 до N factorial(+N, ?R) определен следующим образом factorial(1,1). factorial(2,2). factorial(N,R):- N>1, N1 is N-1, factorial(N1,R1), R is R1*N.
Сколько ответов даст вызов
?- factorial(3,X).
1) один ответ X=6;
2) один неправильный ответ;
3) два правильных ответа;
4) три правильных ответа;
5) программа зациклится;
6) более трех правильных ответов.
Введите номер правильного ответа.

51
Вопрос 36
Пролог. Какие из следующих утверждений правильные.
1. Отсечение отбрасывает все расположенные после него предложения. Если цель p унифицирована с предложением, содержащим отсечение, и отсече- ние выполнено, то эта цель не может быть использована для построения решений с помощью предложений, расположенных ниже данного.
2. Отсечение отбрасывает все альтернативные решения конъюнкции целей, расположенных в предложении левее отсечения, т. е. конъюнкция целей, стоящих перед отсечением, приводит не более чем к одному решению.
3. Отсечение влияет на цели, расположенные правее его. В случае возврата они не могут порождать другие решения.
Введите через пробел номера утверждений (в порядке возрастания), которые вы считаете правильными.
Вопрос 37
Пролог. Предикат для вычисления минимума двух чисел определен следую- щим образом minimum(X,Y,X):- X=Y,!.
По какой причине поставлено отсечение после второго предложения?
Варианты ответов:
1) увеличивает эффективность программы;
2) излишне с любой прагматической точки зрения и поставлено только ради симметрии;
3) есть какая-то польза от этого отсечения, но я не знаю.
Введите номер вашего ответа.
Вопрос 38
Пролог. Какие из приведенных цепочек символов являются атомами:
1) человек(георгий)
2) 'человек(георгий)'
3) man(georg)
4) b
5) A
6) 7 7) very_long_string_of_symbol
8) a+b
9) ++
Введите через пробел номера термов (в порядке возрастания), которые вы считаете атомами.


52
Вопрос 39
Пролог. Определите, будет ли каждая из следующих пар термов унифициру- емой:
1) 'книга'('название'('Ферма животных'), 'автор'('Джордж Оруэлл')) и 'книга'(название'(T)', Avtor);
2) 'дата'('день недели'('среда'), 'число'(12), 'месяц'(M), 'год'(1986)) и 'да- та'(W,D,X,Y);
3) 'праздник'('рождество', 'дата'('день'(25), 'месяц'('декабрь'), 'год'(Y))) и 'праздник'(H, 'дата'(D,M, 'год'(1986));
4) 'праздник'('Первомай'(1, 'май')) и 'праздник'('Первомай', 1, 'май').
Введите через пробел номера пар (в порядке возрастания), для которых, вы считаете, проходит унификация.
Вопрос 40
Пролог. Какие следующие утверждения истинны?
1. В Прологе единственная структура данных - термы.
2. Структура характеризуется своим функтором. Не допускается использо- вать структуры с одинаковым функтором и разной местностью (арностью).
3. Факт - это структура, которая используется в программе для представле- ния объекта или отношения в задаче из конкретной предметной области.
4. Мы задаем вопросы, используя термы в качестве целей.
5. Структура относится к рекурсивному типу данных.
6. Переменная - это "забронированное" место. Любой терм может заменить переменную, но для разных вхождений переменной в структуру не обяза- тельна должна иметь место одна и та же замена.
7. Когда два терма унифицируются, переменные в них заменяются на неко- торые значения.
Введите через пробел номера утверждений (в порядке возрастания), которые вы считаете правильными.
Вопрос 41
В каком порядке Пролог ищет утверждения программы для унификации с це- лью?
Варианты ответов:
1) в порядке размещения клауз (предложений) в тексте программы - сверху вниз;
2) сначала просматриваются факты в программе, потом - правила сверху вниз;
3) Пролог сам устанавливает порядок, исходя из эффективности программы.
Введите номер варианта.
Вопрос 42
Пролог. Какие следующие утверждения истинны?

53 1. Правило имеет заголовок (голову) и тело.
2. Унификация цели может вызвать необходимость унификации подцелей.
3. Пролог всегда совершает возврат для повторной унификации любой цели.
4. Пытаясь согласовать цель повторно, Пролог начинает поиск снова с начала программы.
5. Пользователь может заставить Пролог совершить возврат, отвергнув полу- ченный ответ.
Введите через пробел номера утверждений (в порядке возрастания), которые вы считаете правильными.
Вопрос 43
Пролог. Установите, какие из представленных пар термов унифицируются:
1) [['серый','зеленый'],'черный','голубой'] и [H|T];
2) [['георгий','мария']] и [H|[]];
3) [['уильям','мери']|Any] и [Fist,Second] ;
4) ['дом','осел','лошадь'] и [H,T];
5) [['брак'('георгий','мария')]] и [A];
6) [[1805],1815] и [[A|B],C|D];
7) ['жак','жиль'] и [A,B|C].
Введите через пробел номера пар (в порядке возрастания), для которых, вы считаете, проходит унификация.
Вопрос 44
Пролог. К чему приведет следующий вызов предиката
?- max(4+7, 8*9, N). если предикат max/3 определен следующим образом: max(X,Y,X):-X>=Y. max(X,Y,Y):-Y>X.
Варианты ответов:
1) Пролог ответит Yes и выдаст N=72;
2) Пролог ответит Yes и выдаст N=8*9;
3) Пролог ответит No;
4) Пролог сообщит об ошибке в операциях сравнения.
Введите номер ответа.
Вопрос 45
Пролог. Для каждого варианта вызова выберите свой результат.
Вызовы:
1) X is 7+2;
2) X =:= 7+2;
3) X = 72;
4) 8+1 is 7+2;
5) 8+1 =:= 7+2;


54 6) 8+1 = 7+2.
Результаты:
1) отказ: термы не сопоставимы;
2) унифицируется: подстановка X <- 9;
3) унифицируется: значения выражений одинаковы;
4) ошибка Пролога: X - не арифметическое выражение;
5) отказ: термы не сопоставимы;
6) унифицируется: подстановка X <- … .
Введите через пробел номера результатов, соответствующих вызовам в по- рядке 1), 2),…6).
Вопрос 46
Пролог. Для каждого списка в стандартном синтаксисе, использующем сим- волы '.', '[' и ']' :
1) .(x, .(y, .(z,[])));
2) .( x(y),[]);
3) .([x,y], .([z,y],[]));
4) .([x,y], .(z, .([], .(x,[])))), выберете вариант в сокращенном синтаксисе:
1) [x(y)];
2) [[x,y],z,[],x];
3) [x,y,z];
4) [[x,y],[z,y]].
Введите через пробел номера представлений в сокращенном синтаксисе, со- ответствующих спискам в первом представлении в порядке 1), 2), 3), 4). Если для какого-то списка из первого представления отсутствует правильный ва- риант в сокращенном представлении, введите 0.
Вопрос 47
Пролог. Имеются три варианта определения предиката max:
1) max(N1, N2, N2):- N2>=N1. max(N1, N2, N1):- N22) max(N1, N2, N2):- N2>=N1,!. max(N1, N2, N1).
3) max(N1, N2, N3):-N2>=N1, !, N3=N2. max(N1, N2, N1).
Какие ответы даст Пролог в этих вариантах на вызов?
?- max(3, 7, 3).
Введите через пробел три соответствующих ответа (каждый ответ - слова yes или no).

55
Вопрос 48
Имеется программа s(1). s(2). p(X):-retract(X), fail. p(_).
Какое будет значение у X при вызове
?- p(s(X)).
Варианты ответов:
1) 1;
2) 2;
3) X будет унифицирована с внутренней переменной;
4) будет получен отказ - No.
Введите номер правильного ответа.
Вопрос 49
Пролог. Даны следующие утверждения:
1) каждое небесное тело, заслуживающее внимание, представляет собой либо звезду, либо планету, либо комету;
2) у комет, расположенных недалеко от Солнца, есть хвосты;
3) Венера недалеко от Солнца, но у нее нет хвоста.
Выразим их на языке хорновских клауз:
1)
'небесное тело'(X):- 'заслуживает внимание'(X),
('звезда'(X);'планета'(X);'комета'(X)).
2)
'есть хвост'(X):- 'недалеко от Солнца'(X), 'комета'(X).
3)
'недалеко от Солнца'('Венера').
Какие переводы на языке хорновских дизъюнктов правильны? Помните, что в
Прологе мир замкнут.
Введите через пробел номера правильных переводов (в порядке возрастания).
Вопрос 50
Пролог. Даны следующие утверждения:
1) ни один дракон, который живет в зоопарке, не является счастливым;
2) любой зверь, который встречает добрых людей, является счастливым;
3) люди, которые посещают зоопарк, - добрые;
4) звери, которые живут в зоопарке, встречают людей, которые посещают зо- опарк.
Выразим их на языке хорновских клауз:
1)
'счастливый'(X):- 'живет в зоопарке'(X), not 'дракон'(X).


56 2)
'счастливый'(X):- 'зверь'(X), 'встречает человека'(X,Y), 'добрый человек'(Y).
3)
'добрый человек'(X):- 'посещает зоопарк'(X).
4)
'встречает человека'(X,Y):- 'посещает зоопарк'(Y), 'зверь'(X),
'живет в зоопарке'(X).
Какие переводы на языке хорновских дизъюнктов правильны?
Введите через пробел номера правильных переводов (в порядке возрастания).
Вопрос 51
Пролог. Даны следующие утверждения:
1) каждому кто-то нравится;
2) каждому нравится каждый;
3) кому-то нравится каждый;
4) никому не нравятся все;
5) никому не нравится некто;
6) кому-то не нравится никто.
Используя предикат 'нравится'(x,y) - "иксу нравится игрек", дан перевод этих утверждений на язык логики предикатов (не обязательно в этом порядке):
1) xy  'нравится'(y, x);
2) yx 'нравится'(y,x);
3) xy 'нравится'(x,y);
4) xy 'нравится'(x,y);
5) xy 'нравится'(x,y);
6) xy 'нравится'(x,y).
Введите через пробел номера переводов, соответствующих утверждениям в порядке 1), 2),…6).
Вопрос 52
Лисп. Дано определение функции, вычисляющей полную длину списка, т. е. суммарную длину списка и всех его подсписков:
(defun fullength(s)
(if (atom s) 1
(+ (fullength (car s)) (fullength (cdr s)))))
Чему будет равно значение (fullength '(1)).
Введите ответ.
Вопрос 53
Лисп. Функция ident определена следующим образом:

57
(defun ident (x) x)
Какие из приведенных ниже выражений являются правильными (т. е. Лисп не сообщит об ошибке):
1) (ident (quote a));
2) (quote (ident a));
3) (length a b);
4) (length (quote (a b)));
5) (quote (length a b));
6) (length (ident a b));
7) (ident (quote (a b)));
8) (quote (ident (a b)));
9) (length (ident (quote (a b))));
10)
(length (quote (ident (a b))).
Введите через пробел номера правильных выражений (в порядке возраста- ния).
Вопрос 54
Лисп. Какая ошибка в определении функции, проверяющей, является ли дан- ный список одноуровневым?
(defun f (s)
(if (not (atom (car s))) nil (f (cdr s))))
Варианты ответов:
1) без ошибок;
2) перепутаны случаи "то" и "иначе" в условной функции;
3) надо пользоваться предикатом or;
4) нет окончания рекурсии.
Введите номер ответа.
Вопрос 55
Лисп. Следующая функция удаляет n-ый элемент из списка s.
(defun f(n s)
(cond ((null s) nil)
((= n 1) (rest s))
(t (cons (first s) (1- (rest s))))))
Чему равно значение (length (f 3 '(x y)))?
Введите ответ (если вы считаете, что Лисп выдаст ошибку, введите error ).
Вопрос 56
Лисп. Даны три различные функции с аргументами s - список и x - символь- ное выражение, выполняющие следующие действия:
1) удаляет первое вхождение x из списка s только на верхнем уровне;
2) удаляет все вхождения x из списка s;
3) удаляет все вхождения x из одноуровневого списка s;