Prolog中的CHR解决方案输出

Prolog中的CHR解决方案输出,prolog,swi-prolog,constraint-handling-rules,Prolog,Swi Prolog,Constraint Handling Rules,我正在用SWI Prolog运行一个教科书CHR程序 :- 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. 一切都很顺利,但我不明白为什么输出这么长 ?- fi

我正在用SWI Prolog运行一个教科书CHR程序

:- 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).

谁不仅A=3?我可以禁用其余的吗?对于较大的值来说,这确实是一个不便…

必须在源代码中寻找解决方案,但您可以通过将标志设置为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.
在文件里找到的!