2017-10-06 26 views
6

私はPrologクエリの部分評価を書いています。私はexpand_goal/2を使用してクエリを拡張しようとしたが、それは単に、この場合にOutputInputを統合: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

関連する問題