Uploaded by ZiRead

Логическое программирование

advertisement
Министерство науки и высшего образования Российской Федерации
ФГБОУ ВО Кубанский государственный технологический университет
Многоотраслевой институт подготовки и переподготовки специалистов
Кафедра информационных систем и программирования
Направление подготовки
09.03.04 Программная инженерия
(код и наименование направления)
Профиль
Проектирование и разработка программного обеспечения
(наименование профиля)
КОНТРОЛЬНАЯ РАБОТА № 1
Вариант 2
по дисциплине
Логическое программирование
_______________
(наименование дисциплины)
Студент
3 курса, шифр
Группа
20-ЗКБс-ПР1
Фамилия
Солодкий
Имя
Никита
20-ЗКБс-012
Отчество
, специальность 09.03.04
Константинович
Дата поступления работы
Оценка
Рецензент
”
2023 г. Подпись
”
Краснодар
2023
Урвачев П. М.
Содержание
Содержание…………………………………………………………………2
Введение…………………………………………………………………….3
Написать цель для определения того, содержит ли введённая с клавиатуры
строка только строчные буквы. Использовать красное отсечение….…..4
Написать предикат вычисления факториала…………………..….……....5
Разработать программу преобразования арабских чисел в римские в
диапазоне от 0 до 999………………………………………….…………....6
Заключение…………………………………………………………………..7
Список использованных источников………………………………………8
2
Введение
Логи́ческое программи́рование — парадигма программирования, основанная
на математической логике — программы в ней задаются в форме логических
утверждений и правил вывода. Наиболее известный язык логического
программирования — Пролог.
Первым языком логического программирования был язык Плэнер, в котором
была заложена возможность автоматического вывода результата из данных и
заданных правил перебора вариантов (совокупность которых называлась
планом). Плэнер использовался для того, чтобы понизить требования к
вычислительным ресурсам (с использованием техники поиска с возвратом) и
обеспечить возможность вывода фактов, без активного использования стека.
Затем был разработан Пролог, который не требовал плана перебора
вариантов и был, в этом смысле, упрощением Плэнера.
От Плэнера также произошли логические языки программирования QA-4,
Popler, Conniver и QLISP, а также язык Ether, не использующих метод поиска
с возвратами[1]. Языки Mercury, Visual Prolog, Oz, Fril, Datalog основаны на
Прологе.
3
Написать цель для определения того, содержит ли введённая с
клавиатуры строка только строчные буквы. Использовать красное
отсечение
run():init(),
X=read(),Y=read(), % ввод двух чисел
clearInput(), % очистка буфера ввода
(
X>Y,!,write("Максимальное число: ",X); % для X>Y
write("Максимальное число: ",Y) % для X<=Y
),
_=readchar(),!;
write("\nПрограмма завершена"),
_=readchar().
4
Написать предикат вычисления факториала
implement main
open core, console
constants className = "com/visual-prolog/main".
classVersion = "$JustDate: $$Revision: $".
class predicates
append : (Elem* Список1, Elem* Список2, Elem* Результат) procedure (i,i,o).
clauses
classInfo(className, classVersion).
append([X|L1],L2,[X|L]) :- !,append(L1,L2,L).
append(_,L,L).
run():-init(),
append(["123","abc","абв"],["prolog","пролог"],L),
write(L),nl,
append([8.2,9.4,10.8],[-0.999,123.45],L1),
write(L1),nl,
_=readchar().
end implement main
goal
mainExe::run(main::run).
5
Разработать программу преобразования арабских чисел в римские в
диапазоне от 0 до 999
def checkio(data):
rom = ['I', 'V', 'X', 'L', 'C', 'D', 'M']
str_data = str(data)
str_data = str_data[::-1]
num_digits = len(str_data)
ans = ""
rom_pointer = 0
for place in range(num_digits):
if str_data[place] in ["0", "1", "2", "3"]:
ans = rom[rom_pointer] * int(str_data[place]) + ans
elif str_data[place] in ["4"]:
ans = rom[rom_pointer] + rom[rom_pointer + 1] + ans
elif str_data[place] in ["5", "6", "7", "8"]:
ans = rom[rom_pointer + 1] + rom[rom_pointer] *
(int(str_data[place]) - 5) + ans
elif str_data[place] in ["9"]:
ans = rom[rom_pointer] + rom[rom_pointer + 2] + ans
rom_pointer += 2
return ans
6
Заключение
Сегодня мы многое поняли (с) — и прикоснулись к вершине айсберга
логического программирования. Тезисно (tl;dr) статья умещается в несколько
пунктов:

современное логическое программирование != Пролог;

ASP хорош для решения комбинаторных задач;

вероятностное логическое программирование подходит для моделей
вида: правила + вероятность;

лучше всего использовать ASP и ЛП для создания прототипов и
тестирования идей: "а нам вообще что-то даст это дополнительное
ограничение?", "против чего тестировать будем?", etc;

если у вас нет хороших идей, как написать быстрый поиск к трудной
задаче с ограничениями, скорее всего вам пригодится ASP и это будет
быстрее и надежнее лобового решения.
7
Список использованных источников
1. Фаулер M. Рефакторинг: улучшение существующего кода. – Пер. с
англ. – СПб: Символ Плюс, 2003. – 432 с.
2. Сыромятников С.В., Бронштейн И.Е., Луговской Н.Л. Рефакторинг в
рамках
программного
проекта.
Труды
Института
системного
программирования РАН. 2014. – 402 с.
3. Лаврищева, Е. М. Программная инженерия. Парадигмы, технологии
и case-средства: учебник для вузов / Е. М. Лаврищева. – 2-е изд., испр.
– М.: Издательство Юрайт, 2018. – 280 с.
4. Мартин Р., Чистый код: создание, анализ и рефакторинг. – СПб.:
Питер, 2019. – 464 с.
5. Макконнелл С. Совершенный код. Мастер класс / Пер. с англ. – М.:
Издательство «Русская редакция», 2010. – 896 с.
6. Назаров С.В. Архитектура и проектирование программных систем.
М.: ИНФРА-М, 2013. – 352 с.
8
Download