В.М. Зюзьков ИСКУССТВЕННЫЙ ИНТЕЛЛЕКТ И ЭКСПЕРТНЫЕ СИСТЕМЫ Учебное методическое пособие в демо-файле
Вариант 6
1. Напишите предикат p(+V, +X, -L) - истинный тогда и только тогда, когда
список L получается из списка V после удаления всех вхождений X на
всех уровнях, например, p([1, [2, 3, [1]], [3, 1]], 1, [[2, 3, []], [3]]) - истина.
2. Напишите обобщение предиката member, когда ищется элемент на всех
уровнях в списке.
14
3. Встроенный предикат functor(+Term, ?Functor, ?Arity) определяет для заданного составного терма Term его функтор Functor и местность Arity.
Встроенный предикат arg(+N, +Term, ?Value) определяет для целого числа
N и заданного составного терма Term его N-ый аргумент Value.
Определите предикаты functor1 и arg1 - аналоги предикатов functor и arg
через предикат univ (=..)
4. Напишите предикат range(?M, ?N, ?L), истинный тогда и только тогда, когда L - список целых чисел, расположенных между M и N включительно
(предикат должен допускать различное использование, когда не менее
двух из трех аргументов конкретизованы).
(Указание. Используйте предикаты var(+X) и nonvar(+X)).
5. Определим операторы:
:- op( 100, fy, ~).
:- op( 110, xfy, &).
:- op( 120, xfy, v).
Булева формула есть терм, определяемый следующим образом: константы true и false - булевы формулы; если X и Y - булевы формулы, то и
X v Y, X & Y, ~X - булевы формулы, здесь v и & - бинарные инфиксные
операторы дизъюнкции и конъюнкции, а ~ - унарный оператор отрицания.
Напишите программу, задающую отношение negation_inward(+F1,-F2),
которое выполнено, если логическая формула F2 получается из логической
формулы F1 внесением всех операторов отрицания внутрь конъюнкций и
дизъюнкций