如果我有这样的谓词
some_predicate('12','Jon Doe', 'Unknown town').
是否有可能获得第三个参数?我正在考虑一个可以写成nth_arg(+Predicate,+Nth,-Argument)
的规则。
这种规则是否存在?
答案 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))
。