SWI-Prolog - 使用来自json api call

时间:2016-11-29 21:12:24

标签: swi-prolog

我正在尝试将api添加到其他人的SWI-Prolog应用程序中,以便我可以通过AJAX从我正在编写的PHP / JS应用程序中调用它。除了API,我不需要改变现有的SWI-Prolog应用程序本身,但是,在PHP和JS框架的背景下,我发现它是一个非常陡峭的学习曲线。如果我有时间,我很乐意从头开始学习Prolog,但我希望能提供快捷方式,这样我就可以专注于将会称之为api的应用程序。我遇到了一个非常有用的教程:http://www.pathwayslms.com/swipltuts/html/,它表明以下是我应该做的事情:

:- use_module(library(http/thread_httpd)).
:- use_module(library(http/http_dispatch)).
:- use_module(library(http/http_json)).

% the following allows more lenient content-types in request
:- multifile http_json/1.

http_json:json_type('application/x-javascript').
http_json:json_type('text/javascript').
http_json:json_type('text/x-javascript').
http_json:json_type('text/x-json').

% server(Port) starts webserver on specified Port
server(Port) :- http_server(http_dispatch, [port(Port)]).

% call handle_api on requests to /api/mark
:- http_handler('/api/mark', handle_api, []).

handle_api(Request) :-
        http_read_json_dict(Request, Query),
        solve(Query, Solution),
        reply_json_dict(Solution).

但是,在我的情况下,我需要调用一个谓词,而不是'solve(Query,Solution)',而不是:

mark(question(q_no, q_part, q_sub_part), answer_string)

我可能无法解决的(可能非常基本的)事情是:

  1. 如何在SWI-Prolog中执行相同的console.log()或print_r,以便我可以看到http_read_json_dict返回的内容,以帮助我理解:
  2. 我需要以什么形式的JSON作为'查询'来传递,然后我可以使用它来提取'q_no','q_part','q_sub_part','answer_string'然后我可以将其传递给我mark / 2和question / 3谓词。
  3. 非常感谢任何帮助/指示。

0 个答案:

没有答案