-
-
Notifications
You must be signed in to change notification settings - Fork 0
solvers gen
Synchronous generator-based solver. Yields one Env per solution and supports lazy enumeration.
import gen from 'yopl/solvers/gen.js';
gen(rules, name, args): Generator<Env>
Same rules / name / args semantics as solve, but returns a generator instead of taking a callback.
import {variable} from 'deep6/env.js'; import assemble from 'deep6/traverse/assemble.js'; import gen from 'yopl/solvers/gen.js'; const rules = { member: [(V, X) => [{args: [{value: V, next: X}, V]}], (V, X) => [{args: [{next: X}, V]}, {name: 'member', args: [X, V]}]] }; const list = {value: 1, next: {value: 2, next: {value: 3, next: null}}}; const X = variable('X'); for (const env of gen(rules, 'member', [list, X])) { console.log(assemble(X, env)); // 1, 2, 3 }
Lazy enumeration also works — break out of the loop or call it.next() directly to stop after the first solution.