An open API service indexing awesome lists of open source software.

https://github.com/xieyuheng/logic-db

Embedding a Prolog-like logic programming language in JavasScript and TypeScript.
https://github.com/xieyuheng/logic-db

logic-programming prolog typescript

Last synced: 10 months ago
JSON representation

Embedding a Prolog-like logic programming language in JavasScript and TypeScript.

Awesome Lists containing this project

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

``` bash
npm i logic-db
```

## Usage

``` typescript
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

[**Clause and Effect**](src/examples/clause-and-effect)
- By William F. Clocksin.

[**Structure and Interpretation of Computer Programs (SICP)**](src/examples/sicp)
- By Harold Abelson and Gerald Jay Sussman.
- It has one section about logic programming:
- [sarabander-sicp](http://sarabander.github.io/sicp/html/4_002e4.xhtml#g_t4_002e4)
- [official](http://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book-Z-H-29.html#%_sec_4.4)

[**The Power of Prolog**](src/examples/the-power-of-prolog)
- [An excellent modern teaching of Prolog](https://www.metalevel.at/prolog), by Markus Triska.

## API Docs

TODO

## Contributions

> Be polite, do not bring negative emotion to others.

- [TODO.md](TODO.md)
- [STYLE-GUIDE.md](STYLE-GUIDE.md)
- [CODE-OF-CONDUCT.md](CODE-OF-CONDUCT.md)
- When contributing, add yourself to [AUTHORS](AUTHORS)

## License

- [GPLv3](LICENSE)