Вывод решения CHR в прологе

Я бегу программу CHR учебник в SWI-Пролог.

:- use_module(library(chr)).
:- chr_constraint fib/2.

f0 @ fib(0,M) ==> M=1.
f1 @ fib(1,M) ==> M=1.
fn @ fib(N,M) ==> N>=2 | N1 is N-1, fib(N1,M1), N2 is N-2, fib(N2,M2), M is M1+M2.

Все идет хорошо, но я не понимаю, почему вывод так долго

?- fib(3,A).
A = 3,
fib(1, 1),
fib(0, 1),
fib(1, 1),
fib(2, 2),
fib(3, 3).

Кто не только А = 3? Могу ли я отключить остальные? Это реальное неудобство для больших ценностей...

1 ответ

Решение

Нужно было искать исходный код для решения этой проблемы, но вы можете отключить его, установив флаг в false:

?- set_prolog_flag(chr_toplevel_show_store, false).
true.
?- fib(3, A).
A = 3.

Установка флага в .swiplrc не работает, это нужно сделать после импорта модуля, так что вы можете включить его в свой исходный код:

:- use_module(library(chr)).
:- set_prolog_flag(chr_toplevel_show_store, false).

:- chr_constraint fib/2.

f0 @ fib(0,M) ==> M=1.
f1 @ fib(1,M) ==> M=1.
fn @ fib(N,M) ==> N>=2 | N1 is N-1, fib(N1,M1), N2 is N-2, fib(N2,M2), M is M1+M2.
Другие вопросы по тегам