Файл: Отчет о выполнении лабораторной работы1 по дисциплине Функциональное и логическое программирование.docx
Добавлен: 05.05.2024
Просмотров: 13
Скачиваний: 0
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Министерство науки и высшего образования Российской Федерации
Федеральное государственное бюджетное образовательное учреждение высшего образования
ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)
Кафедра автоматизированных систем управления (АСУ)
Отчет о выполнении лабораторной работы№1
по дисциплине «Функциональное и логическое программирование»
Вариант № 2
Выполнил: Студент ФДО гр. 09.03.01
Тарасов Евгений Максимович (10.01.23)
Проверил: Зюзьков Валентин Михайлович
2023 г.
Содержание:
Содержание……………………………………………………………………………………………………………………………………………2
Выполнение работы………………………………………………………………………………………………………………………………3
Вариант 2
Задание 1. Напишите предикат p(+X, +N, -L) - истинный тогда и только тогда, когда L - список из N раз повторенных элементов X.
Решение:
Код программы:
p(_X, 0, []):-!.
p(X, Length, [X|Tail]):-
TailLength is Length - 1,
p(X, TailLength, Tail).
-
если L — пустой список, а Length равно нулю, то при любом значении X предикат истинен (вычисления завершены); -
если первый элемент L — это X, то: -
-
остальную часть L называем Tail; -
вычисляем новое значение длины (TailLength); -
если предикат истинен для TailLength и остатка списка — то предикат истинен (вычисления завершены);
-
если ни одно сопоставление не прошло успешно — то предикат ложен (вычисления завершены).
Задание 2. Напишите предикат p(+L, -S) - истинный тогда и только тогда, когда S - список списков элементов списка L, например, p([a, b, c],[[a], [b], [c]]) - истина.
Решение:
Prolog
main:-
process,
halt.
isContain(_,[]).
isContain(X,[H|T]):- member(H,X), isContain(X,T).
task(_,[]).
task(L,[X|T]):- isContain(L,X), task(L,T).
process:-
task([a, b, c],[[a], [b], [c], [a,b,c]]),write("Yes"),nl;write("No"),nl.
:- main.