Epilog is a computer language based on Dynamic Logic Programming (DLP). Epilog is similar to other logic programming languages, such as Datalog and Prolog, but there are some differences. Like Datalog, Epilog separates data and rules. Like Prolog, Epilog supports data and rules with functional terms. Like both of these languages, Epilog provides the ability to define views of data. However, Epilog also provides a way to express database dynamics. Whereas Prolog treats side effects implicitly using assert and retract as subgoals in view definitions, Epilog enables users to express side effects in the form of operations defined as database transformations.
Sierra is a browser-based interactive development environment (IDE) for Epilog. It allows users to view and edit datasets, and it allows users to view and edit view definitions, and it allows user to view, edit, and apply operations. It provides a variety of tools for manually querying and modifying datasets, and it automatically updates visible datasets in spreadsheet-like fashion in accordance with the user's rules. It also provides tools for analyzing datasets and rule sets, tools for tracing program execution, and tools for saving and loading files. Click here for a tour of Sierra.
The Optimizer tab leads to a web application that takes a set of Epilog rules as input and applies various optimizations, e.g. subgoal ordering, subgoal elimination, rule elimination, and so forth.
The Compiler tab leads to a web application that takes a set of Epilog rules as input and produces Javascript subroutines that can be called to compute the relations defined in the rules. The subroutines produced by the compiler run faster than the interpreter, in some cases orders of magnitude faster.
The Documentation tab provides access to documentation on Logic Programming, Epilog, Sierra, Worksheets, EpilogJS, and CompilerJS.
The first Epilog interpreter was written in Lisp in the 1980s, and since then it has been ported to Java and Javascript. Over the years, Epilog has been used in a variety of applications, including digital hardware simulation, diagnosis, and testing, data integration, enterprise management, computational law, and general game playing.
|