exécuter un code prolog avec swipl dans une ligne de commande

Je cherche swipl la fonctionnalité similaire à perl -e En particulier, je veux exécuter le code prolog de cette façon:

 swipl --wanted-flag "fact(a). message:-writeln('hello')." -g "message" -t halt 

Ceci est possible à faire avec

  swipl -f file -g "message" -t halt 

où les clauses prolog sont écrites dans le file

Je lance swipl côté serveur qui prend les entrées utilisateur comme des clauses de prolog, par conséquent écrire un fichier sur le serveur n’est pas une bonne idée.

    Une chose que vous pouvez faire est d’utiliser load_files/2 avec l’option stream et de charger depuis l’entrée standard, pas depuis un argument (vous pouvez toujours passer le point d’entrée en argument, je suppose):

    Dites dans un fichier fromstdin.pl vous avez:

     main :- load_files(stdin, [stream(user_input)]), current_prolog_flag(argv, [Goal|_]), call(Goal), halt. main :- halt(1). 

    et avec cela vous pouvez faire:

     $ echo 'message :- format("hello~n").' | swipl -q -t main fromstdin.pl -- message |: hello 

    Les commentaires de @false à cette réponse et à la question vous diront ce que c’est |: si vous vous posez la question, mais si cela vous agace, faites simplement:

     $ echo 'message :- format("hello~n").' \ | swipl -q -t main fromstdin.pl -- message \ | cat hello 

    au lieu.

    Cela vous permettra de lire n’importe quel Prolog depuis l’entrée standard et d’appeler un prédicat arbitraire. Que ce soit une chose intelligente à faire, je ne sais pas. Je ne serais pas non plus surpris s’il existe un moyen beaucoup plus facile de parvenir à la même chose.