Изменения

Перейти к: навигация, поиск

Datalog и рекурсия

104 байта добавлено, 02:35, 13 декабря 2021
Синтаксис
==Синтаксис==
Программа на Datalog - набор '''отношений''': <code>Отношение(x1,x2...xn) :- Цель.</code>
====Структура программы====
Программа на Datalog - набор '''отношений''': <code>Отношение(x1,x2...xn) :- Цель.</code>
====Цель====
'''Цель''' - Набор '''атомов''', перечисленных через запятую
====Атом=========Реляционный==========Арифметический===== реляционныеАналог конструкции условия принадлежности из исчисления доменов.
Есть два вида:
- * Кортеж принадлежит отношению<code>R(x1, x2, ..., xn)</code>- * Кортеж не принадлежит отношению<code>¬R(x1, x2, ..., xn)</code>
-- заметимЗаметим, что в Datalog нет имён атрибутов, атрибуты вместо этого различаются только по своей позиции.
арифметические====Арифметический====
всевозможные сравнения на равенство/неравенство
==Ограничение отношений==Как и на любую другую программу, на синтаксически корректную программу на языке Datalog нужно наложить дополнительные ограничения, чтобы она имела смысл.----------------------
Рассмотрим отношения
Less(x,y) :- x < y. NotStudent(Id, Name) :- not Students¬Students(Id, Name, _). Здесь есть проблема - мы даже не знаем тип x, y, Id и Name, это значит, что мы не знаем области их значения. Запретим так делать, а именно добавим ограничение: Каждая переменная должна входить в неотрицательный реляционный атом.
Здесь есть проблема - мы даже не знаем тип x,y,Id,Name, по сути там могут быть любые значения. Мы породили бесконечное отношение.Запретим так делать, а именно добавим ограничение:Каждая переменная должна входить в неотрицательный реляционный атом.==Рекурсивные запросы==
Рекурсивные запросы
--------------------
Допустим, у нас есть отношение
Parent(Id, ParentId)
Анонимный участник

Навигация