2012-04-28 8 views
0

私はプロローグ - 返さ全体句

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

のようないくつかの基本的な数式を持っていると私が使用する述語かを指定language/2述語:

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

私は何を持っていることと呼ばれる述語を作成することですが

?- body_lit(X). 
X = parent(charles, harry) ; 
X = parent(diana, harry) ; 
... 
X = female(camilla) ; 
X = female(diana) ; 
... 
このように指定された節全体を返す私は call/n機能と functor/3を使用する必要があることを知っています。私はどのように functor/3が動作するか知っていますが、私は述語の名前の代わりに全体の節を返す方法を理解しているようです。

答えて

0

私は、body_litが、その述語で与えられた述語に対するすべての答えを返すと仮定します。

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

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

body_lit(X) :- language(N,A), functor(X,N,A), call(X). 
関連する問題