Фрил - Fril
Парадигма | Логическое программирование |
---|---|
Разработано | Тревор Мартин |
Впервые появился | 1980 |
Стабильный выпуск | 4.984 / 23 августа 2011 г. |
Лицензия | Проприетарное программное обеспечение |
Расширения имени файла | .frl |
Под влиянием | |
микро-ПРОЛОГ |
Фрил это язык программирования за исчисление предикатов первого порядка. Он включает семантика из Пролог как подмножество, но берет свое синтаксис от микро-ПРОЛОГ из Партнеры по логическому программированию и добавляет поддержку нечеткие множества, логика поддержки, и метапрограммирование.
Изначально Fril был разработан Тревором Мартином и Джимом Болдуином в Бристольский университет около 1980 года. В 1986 году его подхватила и доработала Equipu A.I. Research, которая позже стала Fril Systems Ltd. Название Фрил изначально было аббревиатурой от Язык нечеткого реляционного вывода.
Сравнение Prolog и Fril
Помимо функций управления неопределенностью в Fril, есть некоторые незначительные различия в реализации стандартных функций Prolog в Fril.
Типы
Основные типы в Fril похожи на те в Прологе, за одним важным исключением: составным типом данных Пролога является срок, со списками, определенными как вложенные термины с использованием .
функтор; в Fril составным типом является сам список, который составляет основу большинства конструкций. Переменные различаются по идентификаторы содержащий только заглавные буквы и подчеркивает (в то время как Пролог требует, чтобы первый символ был прописным). Как и в Прологе, имя _
зарезервировано для обозначения "любое значение" с несколькими вхождениями _
заменены различными переменными.
Синтаксис
Пролог имеет синтаксис с типичным количеством знаков препинания, тогда как Fril имеет чрезвычайно простой синтаксис, аналогичный синтаксису Лисп. Предложение (пропозициональное) - это список, состоящий из предиката, за которым следуют его аргументы (если есть). К типам конструкций верхнего уровня относятся правила и команды прямого режима.
Правило
Правило - это список, состоящий из заключения, за которым следуют гипотезы (цели). Общие формы выглядят так:
(факт)(вывод цель_1 ... goal_n)
Они эквивалентны соответствующим конструкциям Пролога:
факт.вывод :- цель_1, ..., goal_n.
Например, рассмотрим член
предикат в Прологе:
член(E, [E|_]). член(E, [_|Т]) :- член(E, Т).
В Fril это становится:
((член E (E | _))) ((член E (_ | T)) (член E T))
Связь
Некоторые данные можно представить в виде связи. Отношение эквивалентно набору фактов с тем же именем предиката и константой арность, за исключением того, что ни один из фактов не может быть удален (кроме убийство
в отношении); такое представление потребляет меньше внутренней памяти. Отношение записывается буквально как список, состоящий из имени предиката, за которым следует один или несколько кортежи отношения (все аргументы эквивалентного факта без имени предиката). Предикат также можно объявить отношением, вызвав def_rel
предикат; это работает, только если предлагаемое имя еще не существует в база знаний. Если предикат является отношением, все, что обычно добавляет правило (и не нарушает ограничений отношений), вместо этого автоматически добавляет кортеж к отношению.
Вот пример. Следующий набор фактов:
((my-less-than 2 3)) ((my-less-than 8 23)) ((my-less-than 42 69))
можно переписать как отношение:
(меньше чем (2 3) (8 23) (42 69))
Прямой режим
Предикат может быть вызван ровно с одним аргументом, используя синтаксис:
предикат аргумент
Запросы отправляются с использованием этого синтаксиса с предикат существование ?
(или один из других предикатов, связанных с запросом).
Нечеткие множества
Fril поддерживает как непрерывные, так и дискретные нечеткие множества, каждый со своим собственным синтаксисом. Дискретный набор (dtype) перечисляет дискретные значения и их степени принадлежности с таким синтаксисом:
{ценить:дом ценить:дом ... ценить:дом}
ценить является атомом или числом, и дом - значение в интервале [0, 1].
Непрерывный набор (Я печатаю) списки действительные числа и их степени членства; функция степени принадлежности - это линейная интерполяция по этим отображениям. Синтаксис таков:
[ценить:дом ценить:дом ... ценить:дом]
где значения должны быть указаны в неубывающем порядке.
Каждый dtype и itype могут быть ограничены вселенная (набор допустимых значений). Fril имеет предикаты для операций с нечеткими множествами (но не поддерживает напрямую управление через нечеткая логика ). Можно даже комбинировать dtypes и itypes с помощью некоторых операций, если dtypes содержат только действительные числа.
Пары поддержки
Любое правило может иметь интервал вероятности (называется опорной пары), связанный с ним, присоединяя :(мин Максимум)
к нему, где мин и Максимум - минимальная и максимальная вероятности. Fril включает предикаты, которые вычисляют поддержку данного запроса.
Дизъюнкция
В то время как Пролог использует пунктуацию, а именно ;
- для дизъюнкции внутри предложений Fril вместо этого имеет встроенный предикат orr
.
Заслуги
У этого более простого синтаксиса есть преимущества и недостатки. С положительной стороны, он отображает такие предикаты, как Prolog's =..
(который отображает между списками и предложениями) ненужный, как предложение является список. С другой стороны, читать сложнее.
Поведение
Как среда логического программирования Fril очень похож на Prolog. Вот некоторые отличия:
- И Prolog, и Fril имеют ракушка приложения, которые служат стандартным способом взаимодействия с ними. Prolog считывает команды в двух режимах: в режиме чтения исходного файла принимает директивы и предложения; в режиме взаимодействия с пользователем он принимает только запросы (хотя можно указать Prolog читать директивы и предложения из стандартный ввод используя
проконсультируйтесь (пользователь).
). Fril не делает различий: все типы команд могут быть даны как из исходных файлов, так и в командной строке. - Оболочка Prolog автоматически печатает значения всех созданных переменных, которые появляются в запросе, вместе с да или же нет отвечать. Оболочка Fril дает только ответ; при желании пользователь должен распечатать переменные.
Рекомендации
- Мартин, Т. П. (электронное письмо М. Кантровицу, 10 марта 1994 г.). Re: FRIL. Проверено 18 октября 2005 года. Архивированная копия от 27 ноября 2014 года.
- Пилсворт, Б. У. (нет данных). Язык программирования Fril. Проверено 18 октября 2005 года.
- Fril Systems Ltd (1999). Fril - Онлайн-справочное руководство - Предварительная версия (неполная). Проверено 20 октября 2005 года.
внешняя ссылка
- Fril - загружаемые ресурсы, официальный сайт загрузки Fril
- [Лаборатория логического программирования (Fril) и искусственного интеллекта], Цзэнчан Цинь