Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лаб. 8 ФЛП

.docx
Скачиваний:
0
Добавлен:
29.05.2025
Размер:
226.3 Кб
Скачать

Лабораторная работа 8

%1

nu(X, Y) :-

X = Y, % Пробуем установить X = Y

!, % Если X = Y, используем cut, чтобы избежать возврата.

fail. % Если X = Y, неудача (аналог \+).

nu(_, _). % Если X не равно Y, то успешно завершаем.

% nu(X, X)

% nu(X, foo(Y))

% nu(4, 5)

%2

% Без сечений

abs(X, X) :-

X >= 0.

abs(X, Abs) :-

X < 0,

Abs is -X.

%abs(3, A)

%abs(-1, A)

% С Сечениями

% Определение для положительных чисел и нуля

abs2(X, X) :-

X >= 0, !.

% Определение для отрицательных чисел

abs2(X, Abs) :-

X < 0,

Abs is -X.

%abs2(3, A)

%abs2(-1, A)

%3

% База: объединение пустого списка с любым списком - это сам этот список

set_union([], List2, List2).

% Если элемент из List1 не встречается в Result, добавляем его в Result

set_union([Head | Tail], List2, Result) :-

member(Head, List2), % Проверяем, если элемент уже есть в List2

set_union(Tail, List2, Result). % Рекурсивно объединяем остальные элементы

% Если элемент из List1 не встречается в List2, добавляем его в Result

set_union([Head | Tail], List2, [Head | Result]) :-

\+ member(Head, List2), % Если элемент не встречается в List2

set_union(Tail, List2, Result). % Рекурсивно продолжаем с Tail

%set_union([1,2,3,4,5], [4,5,6,7], Result)

%set_union([1,2,3], [2,3,4], Result)

%5

% Базовый случай: пустой список -> пустой результат

unifiable([], _, []).

% Если Head унифицируется с Term (без изменения переменных), добавляем его в результат

unifiable([Head | Tail], Term, [Head | Result]) :-

\+ \+ (Head = Term), % Временная проверка унификации без изменения переменных

unifiable(Tail, Term, Result).

% Если Head не унифицируется с Term, пропускаем его

unifiable([_ | Tail], Term, Result) :-

unifiable(Tail, Term, Result).

%unifiable([X, b, t(Y)], t(a), List)

%unifiable([foo(A), bar, foo(B), baz(C)], foo(x), List)

%unifiable([a, b, c], d, List)

/*

?- X = a, X == a.

X = a. % True, X связан с a

?- X == a.

false. % X ещё не связан с a, проверка == не позволяет связывать переменные

?- \+ \+ (X = a).

true. % Проверка, возможно ли X = a, но X остаётся свободным

*/

Соседние файлы в предмете Функциональное и логическое программирование