Prolog 以下复杂术语的算术是什么?

Prolog 以下复杂术语的算术是什么?,prolog,logic,arity,Prolog,Logic,Arity,我知道这两个事实是用复杂的术语表达的,而复杂的术语又是作为参数的。术语中嵌套有三个级别的术语 垂直(直线(点(X,Y),点(X,Z))。 水平(直线(点(X,Y),点(Z,Y))。 这是否意味着当其他复杂项嵌套时,整个复杂项的算术数为1?请注意,在Prolog中,您所称的“复杂项”通常称为复合项。您可以通过以下方式轻松检查Prolog术语的算术性: ?- functor(vertical(line(point(X,Y), point(X,Z))), _, Arity). Arity = 1.

我知道这两个事实是用复杂的术语表达的,而复杂的术语又是作为参数的。术语中嵌套有三个级别的术语

垂直(直线(点(X,Y),点(X,Z))。

水平(直线(点(X,Y),点(Z,Y))。

这是否意味着当其他复杂项嵌套时,整个复杂项的算术数为1?

请注意,在Prolog中,您所称的“复杂项”通常称为复合项。您可以通过以下方式轻松检查Prolog术语的算术性:

?- functor(vertical(line(point(X,Y), point(X,Z))), _, Arity).
Arity = 1.
正如你所看到的,你的直觉在这个特殊情况下是正确的

SWI7专用 由于您已在问题中添加了SWI Prolog标记,因此了解SWI 7中也有
复合\u name\u arity/3
,它适用于arity 0的复合术语可能很有用。(在其他序言中,实数为零的复合项是一个原子。)例如:

?- functor(f(), _, Arity).
ERROR: functor/3: Domain error: `compound_non_zero_arity' expected, found `f()'
?- compound_name_arity(f(), _, Arity).
Arity = 0.

垂直
水平
的算术数为1。
行的算术数为2。
点的算术数为2。