2012-04-28 27 views
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/n函數和functor/3。我知道如何functor/3工作,但我似乎無法弄清楚如何返回整個子句,而不是隻是謂詞的名稱。

回答

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).