2017-10-06 249 views
6

我正在爲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是否有內置的謂詞,可以在運行時執行查詢的宏擴展,正如我在此嘗試的那樣?

回答

4

有可能使用擴大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