Задания контрольной работы по дисциплине
«Функциональное и логическое программирование»(для всех вариантов)
1. Создать запрос в соответствии с вариантом к следующему набору фактов на языке Пролог-Д:рейс(Челябинск, Анталья, Ту154).рейс(Челябинск, Хургада, А310). рейс(Челябинск, Москва, Б737).рейс(Екатеринбург, Лондон, Б757). рейс(Екатеринбург, Гамбург, А310).рейс(Екатеринбург, Москва, Ил96). рейс(Екатеринбург, Хургада, А310).рейс(Москва, Анталья, Б737). рейс(Москва, Хабаровск, Ту204).рейс(Москва, СПб, Ан148). аэропорт(Челябинск, Баландино).аэропорт(Екатеринбург, Кольцово). аэропорт(Москва, Внуково).аэропорт(СПб, Пулково).аэропорт(Лондон, Хитроу).
2. Составить программу на языке Пролог-Д для решения заданной в варианте задачи с использованием набора фактов о ценах:
товар(масло,32).товар(хлеб,14).товар(молоко,23).товар(рис,26).товар(мыло,15). товар(творог,26).товар(кефир,14).товар(соль,9). Варианты заданий контрольной работы
1 вариант
1. Какие самолёты летают в Анталью?
2. Составить правило «товары» для упорядочения заданного списка товаров по возрастанию цены, например:
?-товары([рис, хлеб, молоко, мыло],A).
А=[хлеб, мыло, молоко, рис]
Пример выполнения задания контрольной работы
0 вариант
В какие города летают самолеты из аэропорта Внуково? Составить правило вычисления количества товаров, которые по карману владельцу суммы в 20 рублей, если покупается только один товар из возможных, заданных списком, например:?-сколько ([рис, хлеб, молоко, мыло],20,K).
K=2
Решение
Запрос может состоять из двух частей:
Во-первых: к какому городу «г» относится аэропорт Внуково?
?аэропорт(S, Внуково).
S=Москва
Во-вторых: в какие города «T» летают самолёты из Москвы? При этом тип самолёта не важен, маскируем его анонимной переменной «_».
?-рейс(Москва, T,_).
T=Анталья
T=Хабаровск
T=СПб
Составной запрос выглядит так: в какие города «T» есть рейсы из города «S», к которому относится аэропорт Внуково?
рейс(Челябинск, Анталья, Ту154).рейс(Челябинск, Хургада, А310).
рейс(Челябинск, Москва, Б737).рейс(Екатеринбург, Лондон, Б757).
рейс(Екатеринбург, Гамбург, А310).рейс(Екатеринбург, Москва, Ил96).
рейс(Екатеринбург, Хургада, А310).рейс(Москва, Анталья, Б737).
рейс(Москва, Хабаровск, Ту204).рейс(Москва, СПб, Ан148).
аэропорт(Челябинск, Баландино).аэропорт(Екатеринбург, Кольцово).
аэропорт(Москва, Внуково).аэропорт(СПб, Пулково).
аэропорт(Лондон, Хитроу).
?-аэропорт(S, Внуково),рейс(S, T,_).
S=Москва
T=Анталья
T=Хабаровск
T=СПб
Составить правило вычисления количества товаров, которые по карману владельцу суммы в 20 рублей, если покупается только один товар из возможных, заданных списком, например:
?-сколько ([рис, хлеб, молоко, мыло],20,K).
K=2
Во-первых, из пустого списка можно выбрать 0 товаров при любой сумме в кармане:
сколько([],_,0).
Во-вторых, если товар «A» в голове списка нам по карману (его цена «C» не превышает располагаемую сумму «S»), то здесь нужно поставить отсечение «!», исключающее переход к другому варианту (где товар нам не по карману), затем нужно подсчитать количество доступных товаров «N» в хвосте списка «B» и, увеличив «N» на единицу, получить искомое количество «K».
сколько([A|B],S, K):-товар(A, C),C=<S,!,
сколько(B, S,N), K is N+1.
Наконец, последняя, третья альтернатива правила «сколько» будет выбрана только в том случае, если разбор второй альтернативы не дошёл до отсечения, а это значит, что головной элемент списка нам не по карману, или его цена неизвестна, и количество доступных товаров в списке равно количеству доступных товаров в хвосте списка:
сколько([_|B],S, K):-сколько(B, S,K).
Целиком программа выглядит так:
товар(масло,32).товар(хлеб,14).товар(молоко,23).товар(рис,26).
товар(мыло,15).товар(творог,26).товар(кефир,14).товар(соль,9).
сколько([],_,0).
сколько([A|B],S, K):-товар(A, C),C=<S,!,
сколько(B, S,N), K is N+1.
сколько([_|B],S, K):-сколько(B, S,K).
?-сколько ([рис, хлеб, коньяк, мыло, масло, творог, кефир, соль],25,K).
K=4


