0

私はいくつかの基本的な式を持っています

female(camilla).
female(diana).
...
parent(person, child).
...

そして、language/2どの述語を使用するかを指定する述語:

langugage(female, 1).
language(parent, 2).

私がしなければならないことは、body_lit/1次のような言語で指定された句全体を返すという述語を作成することです。

?- body_lit(X).
X = parent(charles, harry) ;
X = parent(diana, harry) ;
...
X = female(camilla) ;
X = female(diana) ;
...

call/nfunction とを使用する必要があることはわかっていますfunctor/3。仕組みはわかっていますfunctor/3が、述語の名前だけでなく、句全体を返す方法がわかりません。

4

1 に答える 1

0

body_litは、言語で与えられた述語に対するすべての回答を、それらのアリティとともに返すことになっていると思います。

body_lit(X) :- language(N,A), functor(F,N,A), call(F), X=F.

language/2述語を選択functor/3し、述語名とそのアリティから実際の呼び出しを作成し、call/1呼び出しを実行して、最後X=Fに呼び出しを出力引数として記録します。最後の統合は削除された可能性があります。

body_lit(X) :- language(N,A), functor(X,N,A), call(X).
于 2012-04-28T19:06:26.460 に答える