Файл: Отчет о выполнении лабораторной работы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).

  1. если L — пустой список, а Length равно нулю, то при любом значении X предикат истинен (вычисления завершены);

  2. если первый элемент L — это X, то:



    1. остальную часть L называем Tail;

    2. вычисляем новое значение длины (TailLength);

    3. если предикат истинен для TailLength и остатка списка — то предикат истинен (вычисления завершены);

  1. если ни одно сопоставление не прошло успешно — то предикат ложен (вычисления завершены).



Задание 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.