Оборка
Парадигма | Логическое программирование |
---|---|
Разработано | Тревор Мартин |
Впервые появился | 1980 год |
Стабильная версия | 4,984
/ 23 августа 2011 г |
Лицензия | Собственное программное обеспечение |
Расширения имен файлов | .frl |
Под влиянием | |
микро-ПРОЛОГ |
Fril — язык программирования для исчисления предикатов первого порядка . Он включает в себя семантику Пролога и добавляет как подмножество, но берет свой синтаксис из микро-ПРОЛОГА компании Logic Programming Associates поддержку нечетких множеств , логики поддержки и метапрограммирования .
Первоначально Fril был разработан Тревором Мартином и Джимом Болдуином в Бристольском университете примерно в 1980 году. В 1986 году его подхватила и доработала компания Equipu AI Research, которая позже стала Fril Systems Ltd. Первоначально название Fril было аббревиатурой от Fuzzy Relational. Язык вывода .
Сравнение Пролога и Фрила
[ редактировать ]Помимо функций управления неопределенностью Fril, существуют некоторые незначительные различия в реализации стандартных функций Prolog во Fril.
Типы
[ редактировать ]Базовые типы в Fril аналогичны типам в Прологе , за одним важным исключением: составным типом данных Пролога является term со списками, определяемыми как вложенные термины с использованием .
функтор; во Fril составной тип — это сам список, который составляет основу большинства конструкций. Переменные отличаются идентификаторами, содержащими только заглавные буквы и символы подчеркивания (тогда как Пролог требует, чтобы только первый символ был в верхнем регистре). Как и в Прологе, имя _
зарезервировано для обозначения «любого значения» с множественным появлением _
заменены отдельными переменными.
Синтаксис
[ редактировать ]Пролог имеет синтаксис с типичным количеством знаков препинания, тогда как у Фрила чрезвычайно простой синтаксис, похожий на синтаксис Лиспа . (Пропозициональное) предложение — это список, состоящий из предиката, за которым следуют его аргументы (если таковые имеются). Среди типов конструкций верхнего уровня есть правила и команды прямого режима.
Правило
[ редактировать ]Правило — это список, состоящий из вывода, за которым следуют гипотезы ( цели ). Общие формы выглядят так:
(fact) (conclusion goal_1 ... goal_n)
Они эквивалентны соответствующим конструкциям Пролога:
fact. conclusion :- goal_1, ..., goal_n.
Например, рассмотрим member
предикат в Прологе:
member(E, [E|_]).
member(E, [_|T]) :- member(E, T).
Во Фриле это выглядит так:
((member E (E|_))) ((member E (_|T)) (member E T))
Связь
[ редактировать ]Некоторые данные могут быть представлены в виде отношений . Отношение эквивалентно набору фактов с одинаковым именем предиката и постоянной арностью , за исключением того, что ни один из фактов не может быть удален (кроме как путем kill
в отношении); такое представление потребляет меньше внутренней памяти. Отношение записывается буквально как список, состоящий из имени предиката, за которым следуют один или несколько кортежей отношения (все аргументы эквивалентного факта без имени предиката). Предикат также можно объявить отношением, вызвав метод def_rel
предикат; это работает только в том случае, если предложенное имя еще не существует в базе знаний . Если предикат является отношением, все, что обычно добавляет правило (и не нарушает ограничений отношений), вместо этого автоматически добавляет кортеж к отношению.
Вот пример. Следующий набор фактов:
((my-less-than 2 3)) ((my-less-than 8 23)) ((my-less-than 42 69))
можно переписать как соотношение:
(my-less-than (2 3) (8 23) (42 69))
Прямой режим
[ редактировать ]Предикат может быть вызван ровно с одним аргументом, используя синтаксис:
predicate argument
Запросы отправляются с использованием этого синтаксиса, предикатом с ?
(или один из других предикатов, связанных с запросом).
Нечеткие множества
[ редактировать ]Fril поддерживает как непрерывные, так и дискретные нечеткие множества, каждое из которых имеет свой особый синтаксис. Дискретный набор ( dtype ) перечисляет дискретные значения и степени их членства, используя следующий синтаксис:
{value:dom value:dom ... value:dom}
value — атом или число, а dom — значение в интервале [0, 1].
Непрерывный набор ( itype ) перечисляет действительные числа и степени их принадлежности; функция степени принадлежности представляет собой линейную интерполяцию по этим отображениям. Синтаксис такой:
[value:dom value:dom ... value:dom]
где значения должны быть указаны в неубывающем порядке.
Каждый dtype и itype может быть ограничен юниверсом ( набором допустимых значений). Fril имеет предикаты для операций с нечеткими множествами (но не поддерживает напрямую управление через нечеткую логику ). Можно даже комбинировать типы и типы с помощью некоторых операций, если типы содержат только действительные числа.
Поддержка пар
[ редактировать ]Любое правило может иметь интервал вероятности (называемый опорной парой), связанный с ним путем добавления :(min max)
к нему, где min и max — минимальная и максимальная вероятности. Fril включает предикаты, которые вычисляют поддержку для данного запроса.
Дизъюнкция
[ редактировать ]Хотя Пролог использует пунктуацию, а именно ;
- для дизъюнкции внутри предложений у Fril вместо этого есть встроенный предикат orr
.
Достоинства
[ редактировать ]У этого более простого синтаксиса есть свои преимущества и недостатки. Положительным моментом является то, что он отображает предикаты, такие как Пролог. =..
(который сопоставляется между списками и предложениями) не нужен, поскольку предложение является списком. С другой стороны, читать сложнее.
Поведение
[ редактировать ]Как среда логического программирования Fril очень похож на Пролог. Вот некоторые различия:
- И Пролог, и Фрил имеют приложения- оболочки , которые служат стандартным способом взаимодействия с ними. Пролог читает команды в двух режимах: в режиме чтения исходного файла он принимает директивы и предложения; в режиме взаимодействия с пользователем он принимает только запросы (хотя можно указать Прологу читать директивы и предложения из стандартного ввода , используя
consult(user).
). Фрил не делает различий: все типы команд можно давать как из исходных файлов, так и в командной строке. - Оболочка Пролога автоматически печатает значения всех созданных переменных, которые появляются в запросе, а также ответ «да» или « нет» . Оболочка FRIL только дает ответ; Пользователь несет ответственность за печать переменных, если это необходимо.
Ссылки
[ редактировать ]- Мартин, Т.П. (электронное письмо М. Кантровицу, 10 марта 1994 г.). Re: ФРИЛ . Проверено 18 октября 2005 г. Архивированная копия 27 ноября 2014 г.
- Пилсуорт, BW (nd). Язык программирования Fril. Архивировано 8 апреля 2005 г. в Wayback Machine . Проверено 18 октября 2005 г.
- Фрил Системс Лтд (1999). Fril — Справочное руководство в Интернете — Предварительная версия (неполная). Архивировано 19 февраля 2006 г. на Wayback Machine . Проверено 20 октября 2005 г.
Внешние ссылки
[ редактировать ]- FRIL — загружаемые ресурсы , официальный сайт загрузки FRIL
- [Лаборатория логического программирования (Fril) и искусственного интеллекта], Цзэнчан Цинь