Формалные системы (индивидуальное, дополнительное задание)
Реализовать правила для целых чисел, представленных в виде термов
s(s(...0...))
. Определить предикаты:number(N)
, определяющий, является ли его параметр числом,equal(N1, N2)
, определяющий равенство двух чисел,more(N1, N2)
, определяющий, является ли первое число больше второго,next(N1, N)
, вычисляющий следующее число для заданного,prev(N1, N)
, вычисляющий предыдущее число для заданного, если это возможно, иначе возвращающий ложь,sum(N1, N2, N)
, вычисляющий сумму двух чисел,dif(N1, N2, N)
, вычисляющий разность двух чисел, если это возможно, иначе возвращающий ложь.
Реализовать правила для множеств, представленных в виде термов
set(a1, set(a2, ...nil...))
. Определить предикаты:is_set(S)
, определяющий, является ли его параметр множеством,in(X, S)
, определяющий принадлежность элемента множеству,equal(S1, S2)
, определяющий равенство двух множеств (в частности, запросequal(set(a, set(b, nil)), set(b, set(a, nil)))
должен возвращать истину),subset(S1, S2)
, определяющий, является ли первое множество подмножеством второго,add(X, S1, S)
, добавляющий элемент ко множеству,remove(X, S1, S)
, удаляющий элемент из множества,intersect(S1, S2, S)
, вычисляющий пересечение двух множеств,union(S1, S2, S)
, вычисляющий объединение двух множеств.
Реализовать правила для списков, представленных в виде термов
list(a1, list(a2, ...nil...))
. Определить предикаты:is_list(L)
, определяющий, является ли его параметр списком,in(X, L)
, определяющий принадлежность элемента списку,equal(L1, L2)
, определяющий равенство двух списков,sublist(L1, L2)
, определяющий, является ли первый список подсписком второго,add_head(X, L1, L)
, добавляющий элемент в начало списка,head(L, X)
, вычисляющий голову списка, если это возможно, иначе возвращающий ложь,tail(L, L1)
, вычисляющий хвост списка, если это возможно, иначе возвращающий ложь,concat(L1, L2, L)
, вычисляющий конкатенацию двух списков.
Реализовать правила для двоичных деревьев, представленных в виде термов
tree(a1, tree(a11, ...nil..., ...nil...), tree(a12, ...nil..., ...nil...))
. Определить предикаты:is_tree(T)
, определяющий, является ли его параметр деревом,equal(T1, T2)
, определяющий равенство двух деревьев,nodes(T, N)
, определяющий количество вершин в дереве,leaves(T, N)
, определяющий количество листовых вершин в дереве,depth(T, N)
, определяющий глубину дерева,width(T, N)
, определяющий ширину дерева (максимальное количество вершин, одинаково удалённых от корня),make_tree(X, T1, T2)
, создающий новое дерево с заданным корнем и двумя поддеревьями.
Реализовать правила для деревьев поиска (двоичное дерево, в левом поддереве которого все элементы меньше корня, а в правом - не меньше), представленных в виде термов
tree(10, tree(5, ...nil..., ...nil...), tree(12, ...nil..., ...nil...))
. Определить предикаты:is_tree(T)
, определяющий, является ли его параметр корректным деревом поиска,in(N, T)
, определяющий принадлежность элемента дереву поиска,add(N, T1, T)
, добавляющий новый элемент в дерево поиска,min(T, N)
, возвращающий минимальный элемент в дереве поиска (находящийся в самом левом поддереве),max(T, N)
, возвращающий максимальный элемент в дереве поиска.
Реализовать правила для недетерминированного конечного автомата, представленного в лекции. Определить факты и предикаты:
final(S)
, набор фактов, определяющий допустимые состояния,trans(S1, S2, C)
, набор фактов, определяющий переход из одного состояния в другое при заданном символе,trans(S1, S2, nil)
, набор фактов, определяющих ε-переходы,accepts(L, S0, NMax)
, правило, определяющее, примет ли автомат строку, содержащуюся в списке, начиная с заданного начального состояния и использующее заданное ограничение на количество проверок во избежание зацикливания.
Реализовать часть базы знаний мира Вампуса при помощи следующих фактов и правил:
percept(X, Y, B, S, G)
, набор фактов, определяющих, какие из ощущений (ветерок, запах, блеск) ощущаются в квадрате[X, Y]
(неизвестно агенту).breezy(X, Y)
, правило, определяющее, чувствуется ли в заданном квадрате ветерок,stinky(X, Y)
, правило, определяющее, чувствуется ли в заданном квадрате запах,glittery(X, Y)
, правило, определяющее, чувствуется ли в заданном квадрате блеск,adjacent(X1, Y1, X2, Y2)
, правило, возвращающее все квадраты, соседние по отношению к заданному.