我试图编写一个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。但我不知道如何使用它可用的文档。