https://github.com/rla/prolog-target-js
Simple Prolog to JS transpiler
https://github.com/rla/prolog-target-js
javascript swi-prolog transpiler
Last synced: 12 months ago
JSON representation
Simple Prolog to JS transpiler
- Host: GitHub
- URL: https://github.com/rla/prolog-target-js
- Owner: rla
- Created: 2012-10-11T00:06:10.000Z (over 13 years ago)
- Default Branch: master
- Last Pushed: 2012-10-19T13:27:30.000Z (over 13 years ago)
- Last Synced: 2025-04-07T09:38:44.788Z (over 1 year ago)
- Topics: javascript, swi-prolog, transpiler
- Language: JavaScript
- Size: 129 KB
- Stars: 20
- Watchers: 2
- Forks: 2
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
prolog-target-js
================
Simple Prolog to JS transpiler. The project is at rather incomplete state at the moment.
Example input:
```prolog
append([], Ys, Ys).
append([X|Xs], Ys, [X|Zs]):- append(Xs, Ys, Zs).
```
Example output:
```javascript
function append_3_0($0, $1, $2, s, cb) {
var $3 = new Var();
var _i = s.length;
s.push(function() {
return append_3_1($0, $1, $2, s, cb);
});
if (!_u(s, $0, '[]')) return _b(s);
if (!_u(s, $1, $3)) return _b(s);
if (!_u(s, $2, $3)) return _b(s);
return cb;
}
function append_3_1($0, $1, $2, s, cb) {
var $3 = new Var();
var $4 = new Var();
var $5 = new Var();
var $6 = new Var();
var _i = s.length;
if (!_u(s, $0, new Struct('.', $3, $4))) return _b(s);
if (!_u(s, $1, $5)) return _b(s);
if (!_u(s, $2, new Struct('.', $3, $6))) return _b(s);
return append_3_0($4, $5, $6, s, cb);
}
exports.append_3 = append_3_0;
```
Calling the predicate
---------------------
```javascript
var runtime = require('../runtime');
var util = require('../util');
var append = require('./append');
var list1 = util.array2List([1, 2, 3, 4, 5]);
var list2 = util.array2List([6, 7, 8, 9, 10]);
var result = new runtime.Var();
runtime.run(append.append_3(list1, list2, result, [], null));
console.log('Result is: ' + runtime.toString(result));
```