logic-db
v0.1.4
Published
Embedding a Prolog-like logic programming language in JavasScript and TypeScript.
Downloads
5
Readme
LogicDB
Embedding a Prolog-like logic programming language in JavasScript and TypeScript.
- Combining logic programming and database management.
- Can declare relations between JSON documents.
- Well typed relation in TypeScript.
- Practical and simple API.
Install
npm i logic-db
Usage
import Logic, { v, ne, ty } from "logic-db"
// NOTE Drinking Pairs -- example from "Clause and Effect"
const drinks = new Logic.Table({
name: "drinks",
schema: ty.object({
person: ty.string(),
alcohol: ty.string(),
}),
})
drinks.i({ person: "john", alcohol: "martini" })
drinks.i({ person: "mary", alcohol: "gin" })
drinks.i({ person: "susan", alcohol: "vodka" })
drinks.i({ person: "john", alcohol: "gin" })
drinks.i({ person: "fred", alcohol: "gin" })
drinks.i({ person: "fred", alcohol: "vodka" })
const pair = new Logic.Table({
name: "pair",
schema: ty.object({
p1: ty.string(),
p2: ty.string(),
alcohol: ty.string(),
}),
})
pair.i({ p1: v`p1`, p2: v`p2`, alcohol: v`alcohol` }, (v) => [
drinks.o({ person: v`p1`, alcohol: v`alcohol` }),
drinks.o({ person: v`p2`, alcohol: v`alcohol` }),
ne(v`p1`, v`p2`),
])
console.log(pair.query({ p1: v`x`, p2: "mary", alcohol: "gin" }))
console.log(pair.query({ p1: v`x`, p2: v`y`, alcohol: "gin" }))
console.log(pair.query({ p1: v`x`, p2: v`y`, alcohol: v`alcohol` }))
Examples
- By William F. Clocksin.
Structure and Interpretation of Computer Programs (SICP)
- By Harold Abelson and Gerald Jay Sussman.
- It has one section about logic programming:
- An excellent modern teaching of Prolog, by Markus Triska.
API Docs
TODO
Contributions
Be polite, do not bring negative emotion to others.
- TODO.md
- STYLE-GUIDE.md
- CODE-OF-CONDUCT.md
- When contributing, add yourself to AUTHORS