Bonjour,
depuis plusieurs jours je suis bloqué par le problème suivant: je souhaite interroger une instance unique de prolog contenant de nombreux prédicats et règles à travers un système de socket.
Les prédicats et règles étant partagées entre les clients et particulièrement nombreux je préfère ne pas mettre en oeuvre un système de chargement des données par fichier (il pourrait y avoir plusieurs milliers de requetes par seconde).
Les librairies Prolog proposent tout ce qu'il faut pour construire un serveur qui écoute les appels sur une socket, gère des files d'attentes... mais jusqu'à présent je n'ai pas réussi à exécuter une requête sur un prédicat ou une règle connue par prolog. Je pense ne pas être très loin, et un œil extérieur pourra sans doute trouver le détail qui me manque : le client
J'ai tenté des appels via call, sans résultat.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 :- use_module(library(socket)). :- use_module(library(streampool)). server(Port) :- tcp_socket(Socket), tcp_bind(Socket, Port), tcp_listen(Socket, 5), tcp_open_socket(Socket, In, _Out), add_stream_to_pool(In, accept(Socket)), stream_pool_main_loop. accept(Socket) :- tcp_accept(Socket, Slave, Peer), tcp_open_socket(Slave, In, Out), add_stream_to_pool(In, client(In, Out, Peer)). client(In, Out, _Peer) :- read_line_to_codes(In, Command), close(In), write(Out, animal(Command)), close(Out), cat(tom). animal(X) :- cat(X).
D'avance merci pour vos idées.
Cdt,
jfv
Partager