@andreabiagini5/applicazioni-e-servizi-web-project
Version:
Project for Applicazioni e Servizi Web.
63 lines • 2.13 kB
JavaScript
;
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