2017-09-16 4 views
1

J'utilise SWI-Prolog avec la bibliothèque clpr pour résoudre les contraintes sur les nombres réels. Je fais cela en appelant SWI-Prolog du command line et en analysant la sortie par un autre programme.SWI-Prolog: Comment écrire une solution à la sortie de la ligne de commande?

Par exemple, pour résoudre quelque chose comme {F = 1.8 * C + 32}, {C = 25}. je produis la commande suivante:

swipl \ 
    -g "use_module(library(clpr))" \ 
    -g "{F = 1.8 * C + 32}, {C = 25}, write(\"F -> \"), write(F), write(\"\\n\")" \ 
    -g halt 

Et la sortie de SWI-Prolog est:

F -> 77.0 

Cela fonctionne très bien si le résultat est une plaine nombre mais pas si le résultat est à nouveau une contrainte (ou une solution plus complexe en général). Par exemple, pour {X > 3}, {Y < 5}, {X + Y = 10}., j'obtiens la solution {Y < 5.0, X = 10.0 - Y} dans l'environnement SWI-Prolog mais je n'ai pas trouvé le moyen d'écrire ceci dans la sortie de la ligne de commande. Y a-t-il un moyen de faire cela?

+0

Bien sûr, vous ne voulez pas utiliser [tag: CLPQ] à la place? clpr est criblé de problèmes numériques partout ... – false

Répondre

2

Vous pouvez utiliser dump/3 prédicat, par exemple:

{X > 3}, {Y < 5}, {X + Y = 10}, dump([X,Y], [x,y], L), write(L). 

produit:

[y=10.0-x,x>5.0] 
+0

Merci! C'est exactement ce que je cherchais. – Michael