lib-jsl
Version:
JSL is a JSON based logic programming library meant for embedded use
72 lines (58 loc) • 1.88 kB
JavaScript
var JSL = require('../../jsl.js');
var validator = require('../../validator.js');
var rules = [
[ { txnpart : { name : '$name', obj : '$obj'} },
{ $or : [
{ $and : [
{ rows : { part3 : '$part3'} },
{ $bind : [ [ '$name', '$obj'], [null, null] ] }
] },
{ $and : [
{ rows : { part2 : '$part2'} },
{ part3 : '$part3'},
{ $bind : [ [ '$name', '$obj'], ['part3', '$part3'] ] }
] },
{ $and : [
{ rows : { part1 : '$part1'} },
{ part2 : '$part2'},
{ $bind : [ [ '$name', '$obj'], ['part2', '$part2'] ] }
] },
{ $and : [
{ part1 : '$part1' },
{ $bind : [ [ '$name', '$obj'], ['part1', '$part1'] ] }
] }
] } ],
[{ part1 : { a : 1, b : 2 }}],
[{ part2 : '$part2'},
{ rows : { part1 : { a : '$a', b : '$b'}}},
{ $bind : [ '$part2', {x: '$a', y : '$b', c : 3, d : 4 } ] },
],
[{ part3 : '$part3'},
{ rows : { part2 : { c : '$c', d : '$d'}}},
{ $bind : [ '$part3', {p: '$c', q : '$d', e : 5, f : 6 } ] },
]
];
//console.log(JSON.stringify(rules, null, 2));
if (!validator.validateJsl(rules)) {
console.log('rules validation failed');
process.exit();
}
var callbacks = {};
var query = [{ txnpart : '$txnpart'}];
var transform = '$txnpart';
var retval = [];
var rows = {};
do {
//console.log(JSON.stringify(rules.concat([[{rows : rows}]]), null,2));
var jsl = new JSL ({
rules : rules.concat([[{rows : rows}]]),
query : query,
transform : transform,
callbacks : callbacks
});
retval = jsl.run();
if (retval != null && retval[0] != null) {
rows[retval[0].name] = retval[0].obj
}
console.log(JSON.stringify(retval, null,2));
} while (retval[0].obj != null)