тау пролог существование_ошибка на примере учебника

Я следую учебнику по тау-прологу и сталкиваюсь с этой ошибкой:

      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, поэтому вызовы вложенных функций.

Это в документах... вздох.

И этот ТАК пост освещал это. Извините за потраченное время людей.

Другие вопросы по тегам