Какие-нибудь примеры того, как использовать yap's socket_select/5?
Я пытаюсь написать сервер пролога, чтобы иметь возможность запрашивать базу знаний, написанную на прологе, у клиента, написанного на другом языке программирования (Python, JavaScript, что угодно...), так же, как и база данных SQL.
Я бы подумал, что это довольно распространенная вещь, но я не могу найти никаких примеров в Интернете.
Все необходимые функции сокетов перечислены в https://www.dcc.fc.up.pt/~vsc/Yap/documentation.html и причина, по которой я использую yap вместо swi-prolog, заключается в том, что я хочу использовать сокет Unix, а не сокет TCP/IP. Но я буду использовать AF_INET здесь, поскольку AF_UNIX не поддерживается swi-prolog.
Написать сервер, который пишет строку с клиента, легко:
#!/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. Но я не знаю из имеющейся документации, как его использовать.