Проблема мета-интерпретатора XSB Prolog с ограничениями clpr
Я запускаю XSB Prolog на моем Mac (El Capitan 10.11.2): XSB версии 3.6. (Gazpatcho) от 22 апреля 2015 г. [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})
не работает - он не соответствует четвертому предложению и сходит в пятом предложении.
Есть идеи почему?
2 ответа
Хм, кажется, что если загрузить файл, содержащий код с load_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