1

我正在尝试编写一个 prolog 服务器,以便能够从用另一种编程语言(Python、JavaScript 等)编写的客户端查询用 prolog 编写的知识库,就像 SQL 数据库一样。

我原以为这是一件很常见的事情,但我在网上找不到任何例子。

所有必需的套接字函数似乎都列在https://www.dcc.fc.up.pt/~vsc/Yap/documentation.html#Sockets上,我使用 yap 而不是 swi-prolog 的原因是我想要使用 Unix 套接字,而不是 TCP/IP 套接字。但我将在这里使用 AF_INET,因为 swi-prolog 不支持 AF_UNIX。

编写一个从客户端写入字符串的服务器很容易:

#!/usr/bin/yap -L --

:- initialization(main).

main :-
    socket('AF_INET', Socket),
    socket_bind(Socket, 'AF_INET'('localhost', 1234)),
    socket_listen(Socket, 2),
    socket_accept(Socket, _Client, Stream),
    read(Stream, Term),
    write(Term),
    socket_close(Socket).

我使用的简单 Python 3 客户端如下所示:

import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('localhost', 1234))
sock.send(b"'Hello World\n'")
sock.close()

棘手的地方是让服务器将字符串回显给客户端,据我所知,这需要 socket_select/5 。但是我从可用的文档中不知道如何使用它。

4

0 回答 0