2017-02-28 115 views
1

一个具体的说法如果我有这样的查找Prolog的谓词

some_predicate('12','Jon Doe', 'Unknown town'). 

谓语是有可能得到例如第三参数呢?我正在考虑一个可以这样写的规则nth_arg(+Predicate,+Nth,-Argument)

这种规则是否存在?

+0

你会给'+谓语'? 'some_predicate'或'some_predicate(12,'John Doe','不知名的城镇')''。 –

回答

2

有一个ISO谓词,arg/3,但这正是是:

?- arg(2, foo(a,b,c), Arg). 

Arg = b 

yes 
| ?- 

用于第二参数的正确术语是化合物术语(带有参数的术语)。 A 谓词':-'(head, body)形式的特定术语,或者仅仅是头部,其定义了规则。并非所有条款都定义规则。有时他们只是数据结构。

可以,例如,得到一个谓语的整个身体如下:

?- arg(2, (foo(X,Y) :- X > 1, Y is X * 3), Body). 
Body = (X>1,Y is X*3) 

yes 
| ?- 

这是因为在给定的谓词术语::-(foo(X,Y), (X > 1, Y is X*3))

+0

这正是我所期待的,非常感谢! – tomatediabolik