миниКанрен
miniKanren — семейство языков программирования для реляционного программирования . [1] Поскольку отношения являются двунаправленными , если miniKanren задано выражение и желаемый результат, miniKanren может запустить выражение «назад», находя все возможные входные данные для выражения, которые производят желаемый результат. Такое двунаправленное поведение позволяет пользователю одновременно ограничивать как ввод в программу, так и результат программы. miniKanren выполняет чередующийся поиск, который в конечном итоге находит любое существующее решение, даже если какая-либо ветвь дерева поиска бесконечно длинна и не содержит решений. Если решения не существует, miniKanren может искать бесконечно, если дерево поиска бесконечно.
Пример кода miniKanren: evalo
, реляционная цель, которая связывает выражения со значениями, которые они оценивают. Когда evalo
в miniKanren вызывается так: (evalo q q)
, он будет генерировать куайны , то есть выражения q
что при запуске оценят сами. [2]
В книге The Reasoned Schemer miniKanren используется для демонстрации реляционного программирования и представлена полная реализация на Scheme . [3] Ядро языка умещается на двух печатных страницах. Реализация miniKanren в виде схемы разработана таким образом, чтобы ее было легко понять, изменить и расширить.
αleanTAP — это программа, написанная на αKanren, расширении miniKanren для номинальной логики . Учитывая теорему, он может найти доказательство, что делает его доказывающим теорему . Имея доказательство, он может найти теорему, превратив ее в средство проверки теорем. Учитывая часть доказательства и часть теоремы, он заполнит недостающие части доказательства и теоремы, превратив его в исследователя теорем. [1]
Существуют реализации miniKanren в Haskell , Racket , Ruby , Clojure , JavaScript , Scala , Swift , Dart и Python . Каноническая реализация — это встроенный язык в Scheme . Библиотека Clojure core.logic была вдохновлена miniKanren.
Название канрен происходит от японского слова ( 関連 ), означающего «отношения».
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Jump up to: а б Уилл Берд (август 2009 г.). Реляционное программирование в miniKanren: методы, приложения и реализации (PDF) (доктор философии). Университет Индианы .
- ^ Уилл Берд, Эрик Холк и Дэн Фридман (2012). «miniKanren, живой и без тегов: генерация Quine с помощью реляционных интерпретаторов (жемчужина программирования)» (PDF) . Материалы ежегодного семинара по схемам и функциональному программированию 2012 г. АКМ : 8–29.
{{cite journal}}
: CS1 maint: несколько имен: список авторов ( ссылка ) - ^ Дэн Фридман; Уилл Берд; Олег Киселёв (2005). Разумный интриган . МТИ Пресс . ISBN 9780262562140 .