带有clpr约束的XSB Prolog元解释器问题

带有clpr约束的XSB Prolog元解释器问题,xsb,clpr,Xsb,Clpr,我正在Mac上运行XSB Prolog(El Capitan 10.11.2): XSB版本3.6。(Gazpatco)2015年4月22日 [i386-apple-darwin15.2.0 64位;模式:最佳;引擎:slg wam;调度:本地] [建设日期:2016-01-17] 我正在使用clpr包,想写一个小的元解释器: :- [clpr]. try((G1,G2)):- !, try(G1), try(G2). try((G1; G2)):- !, try(G1); try (G2).

我正在Mac上运行XSB Prolog(El Capitan 10.11.2): XSB版本3.6。(Gazpatco)2015年4月22日 [i386-apple-darwin15.2.0 64位;模式:最佳;引擎:slg wam;调度:本地] [建设日期:2016-01-17]

我正在使用clpr包,想写一个小的元解释器:

:- [clpr].
try((G1,G2)):- !, try(G1), try(G2).
try((G1; G2)):- !, try(G1); try (G2).
try(true):- !.
try({X}):- !, {X}.
try(G):- clause(G, Body), try(Body).
但是,
try({X=1+2})
不起作用——它与第四个子句不匹配,并降为第五个子句


知道为什么吗?

Hmm,如果使用
load\u dyn(test)
加载包含代码的文件,代码似乎可以工作。(如果我只是查阅文件,即用
[test]

Hmm加载包含代码的文件,似乎如果用
load\u dyn(test)
加载文件,代码就工作了。(如果我只是查阅文件,即用
[test]加载,代码就不工作了。)

这确实很奇怪。如果重新查询代码两次,则会得到预期结果:

XSB Version 3.6. (Gazpatcho) of April 22, 2015
[i386-apple-darwin15.3.0 64 bits; mode: optimal; engine: slg-wam; scheduling: local]
[Build date: 2016-02-07]

| ?- reconsult(xsbb).
[xsbb loaded]
[clpr loaded]
[dump loaded, cpu time used: 0.0010 seconds]
[itf loaded]
[geler loaded]
[class loaded]

yes
| ?- reconsult(xsbb).
[xsbb loaded]
[clpr loaded, cpu time used: 0.0010 seconds]
[dump loaded]
[itf loaded]
++Warning[XSB]: [Runtime/P]  replacing previous verify_attribute_handler for module itf
[geler loaded]
++Warning[XSB]: [Runtime/P]  replacing previous verify_attribute_handler for module geler
[class loaded]
++Warning[XSB]: [Runtime/P]  replacing previous verify_attribute_handler for module class
++Warning[XSB]: [Runtime/P]  replacing previous constraint_portray_hook for module clpr

yes
| ?- try({X=1+2}).

X = 3.0000

yes

这确实很奇怪。如果您重新查询代码两次,则会得到预期的结果:

XSB Version 3.6. (Gazpatcho) of April 22, 2015
[i386-apple-darwin15.3.0 64 bits; mode: optimal; engine: slg-wam; scheduling: local]
[Build date: 2016-02-07]

| ?- reconsult(xsbb).
[xsbb loaded]
[clpr loaded]
[dump loaded, cpu time used: 0.0010 seconds]
[itf loaded]
[geler loaded]
[class loaded]

yes
| ?- reconsult(xsbb).
[xsbb loaded]
[clpr loaded, cpu time used: 0.0010 seconds]
[dump loaded]
[itf loaded]
++Warning[XSB]: [Runtime/P]  replacing previous verify_attribute_handler for module itf
[geler loaded]
++Warning[XSB]: [Runtime/P]  replacing previous verify_attribute_handler for module geler
[class loaded]
++Warning[XSB]: [Runtime/P]  replacing previous verify_attribute_handler for module class
++Warning[XSB]: [Runtime/P]  replacing previous constraint_portray_hook for module clpr

yes
| ?- try({X=1+2}).

X = 3.0000

yes