2017-02-28 109 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