在Prolog谓词中查找特定参数

时间:2017-02-28 15:56:59

标签: prolog

如果我有这样的谓词

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

是否有可能获得第三个参数?我正在考虑一个可以写成nth_arg(+Predicate,+Nth,-Argument)的规则。

这种规则是否存在?

1 个答案:

答案 0 :(得分:2)

有一个ISO谓词arg/3,就是这样:

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

Arg = b

yes
| ?-

第二个参数的正确术语是复合词(带参数的术语)。 谓词是一个特定术语,形式为':-'(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))