тау пролог существование_ошибка на примере учебника
Я следую учебнику по тау-прологу и сталкиваюсь с этой ошибкой:
throw(error(existence_error(procedure,/(fruits_in,2)),/(top_level,0)))
Мой index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Hello, Tau Prolog!</title>
</head>
<body>
<script src="tau-prolog.js"></script>
<script src="main.js"></script>
</body>
</html>
main.js это
let session = pl.create();
session.consult(" \
% load lists module \
:- use_module(library(lists)). \
\
% fruit/1 \
fruit(apple). fruit(pear). fruit(banana). \
\
% fruits_in/2 \
fruits_in(Xs, X) :- member(X, Xs), fruit(X). \
", {
success: () => { console.log("success") },
error: (err) => { console.log('error: ', err); }
});
session.query("fruits_in([carrot, apple, banana, broccoli], X).", {
success: (goal) => { console.log('Query success. Goal: ', goal) },
error: (err) => { console.log('error: ', err) }
});
session.answer({
success: (answer) => {
console.log(answer); // {X/apple}
session.answer({
success: (answer) => {
console.log(answer); // {X/banana}
},
error: (err) => { console.log(`answer error: ${err}`) },
fail: () => { console.log('no more answers') },
limit: () => { console.log('limit') }
});
},
error: (err) => { console.log(`answer error: ${err}`) },
fail: () => { console.log('no more answers') },
limit: () => { console.log('limit') }
})
и вывод консоли
Я не уверен, куда идти дальше, и я был бы благодарен за то, что кто-то указал на ошибку новичка, которую я сделал!
*** ОБНОВИТЬ
Если я изменю
session.consult
от использования
"
а также
\
, чтобы использовать новый синтаксис строки шаблона, этот код работает!
новая сессия.консультируйтесь:
session.consult(`
% load lists module
:- use_module(library(lists)).
% fruit/1
fruit(apple). fruit(pear). fruit(banana).
% fruits_in/2
fruits_in(Xs, X) :- member(X, Xs), fruit(X).
`, {
success: () => { console.log("success") },
error: (err) => { console.log('error: ', err); }
});
Итак, новый вопрос: «Почему это имеет значение?»
Спасибо еще раз!
1 ответ
OK - процесс асинхронный, и
answer
необходимо выполнить после
query
который необходимо выполнить после
consult
, поэтому вызовы вложенных функций.
Это в документах... вздох.
И этот ТАК пост освещал это. Извините за потраченное время людей.