在SWI-Prolog中实现部分评估
问题描述:
我正在为Prolog查询编写一个部分评估器。我试图扩大使用expand_goal/2
查询,但它只是在这种情况下,Output
统一了Input
:在SWI-Prolog中实现部分评估
:- initialization(main).
main :-
Input=is_between(1,A,3),expand_goal(Input,Output),writeln(Output).
is_between(A,B,C) :-
B>A,B<C.
我使用term_expansion/2
也尝试过,但是这会导致程序失败:
:- initialization(main).
main :-
Input=is_between(1,A,3),term_expansion(Input,Output),writeln(Output).
is_between(A,B,C) :-
B>A,B<C.
SWI-Prolog是否有内置的谓词,可以在运行时执行查询的宏扩展,正如我在此尝试的那样?
答
有可能使用扩大Prolog的条款内置clause/2
谓:
:- initialization(main).
main :- clause(is_between(1,2,3),B),writeln(B).
is_between(A,B,C) :- A<B,C>B.
这个例子打印1<2,3>2
。