3

call(Goal,Arg)を使用すると、引数 Arg を Goal の引数に追加し、結果のゴールを呼び出すことができます。

call(succ(1), R).

と同じです

succ(1, R).

ただし、引数リストに追加したくはありませんが、代わりに先頭に追加します。

callpre(succ(1), R).

結果として

succ(R, 1).

ゴールの引数のリストに引数を追加して、結果のゴールを呼び出すにはどうすればよいですか?

4

2 に答える 2

2

任意の数の引数について、次のように定義できます。

callpre(MGoal, Arg) :-
    strip_module(MGoal, M, Goal), 
    Goal =.. [F | Args],
    NewGoal =.. [F, Arg|Args], 
    M:NewGoal.

meta_predicate/1これには宣言も必要です。

:- meta_predicate callpre(1, *). 
于 2016-10-21T18:29:05.287 に答える