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工作,但我似乎无法弄清楚如何返回整个子句而不仅仅是谓词的名称。

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 回答