SWI-Prolog: Как написать решение для вывода командной строки?

Я использую SWI-Prolog с библиотекой clpr для решения ограничений на действительные числа. Я делаю это, вызывая SWI-Prolog из командной строки и анализируя вывод другой программой.

Например, чтобы решить что-то вроде {F = 1.8 * C + 32}, {C = 25}. Я генерирую следующую команду:

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

И вывод из SWI-Prolog:

F -> 77.0

Это прекрасно работает, если результатом является простое число, но не если результат снова является ограничением (или более сложным решением в целом). Например, для {X > 3}, {Y < 5}, {X + Y = 10}. Я получаю решение {Y < 5.0, X = 10.0 - Y} в среде SWI-Prolog, но я не нашел способа записать это в вывод командной строки. Есть ли способ сделать это?

1 ответ

Решение

Вы можете использовать предикат dump/3, например:

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

производит:

 [y=10.0-x,x>5.0]
Другие вопросы по тегам