UNPKG

@andreabiagini5/applicazioni-e-servizi-web-project

Version:
63 lines 2.13 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.query = void 0; const pl = require('tau-prolog'); const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); const session = pl.create(10000000); /** * Initializes the Prolog engine by loading the Prolog file. * @returns true if Prolog is ready, false otherwise. */ const init = async () => { try { const prologFilePath = path_1.default.resolve(__dirname, './bot.pl'); const program = fs_1.default.readFileSync(prologFilePath, 'utf8'); return new Promise((resolve, reject) => { session.consult(program, { success: function () { resolve(); }, error: function (error) { console.error('Error consulting Prolog program:', error); reject(error); }, }); }); } catch (error) { console.error('Error loading Prolog file:', error); return Promise.reject(error); } }; /** * Queries the Prolog engine with a given goal. * @param goal the Prolog goal to query. * @returns the results of the query as an array of strings. */ const query = async (goal) => { await init(); return new Promise((resolve, reject) => { session.query(goal, { success: () => { const results = []; const handleAnswer = (answer) => { if (answer === false || answer === null) { resolve(results); } else { results.push(session.format_answer(answer)); session.answer(handleAnswer); } }; session.answer(handleAnswer); }, error: (err) => reject(err), }); }); }; exports.query = query; //# sourceMappingURL=prolog.js.map