我正在尝试将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)
我可能无法解决的(可能非常基本的)事情是:
非常感谢任何帮助/指示。