我理解这两个事实是用复杂的术语表达的,这些术语又以复杂的术语作为论据。术语嵌套在三个级别的术语中。
vertical(line(point(X,Y), point(X,Z))).
horizontal(line(point(X,Y), point(Z,Y))).
这是否意味着整个复杂项的元数为一个,因为其他复杂项是嵌套的?
请注意,您所说的“复杂项”通常在 Prolog中称为复合项。您可以通过以下方式自己轻松检查 Prolog 术语的数量:
?- functor(vertical(line(point(X,Y), point(X,Z))), _, Arity).
Arity = 1.
如您所见,在这种特殊情况下,您的直觉是正确的!
由于您已将 SWI-Prolog 标签添加到您的问题中,因此知道在 SWI 7 中还有compound_name_arity/3
,它适用于 arity 0 的复合术语可能很有用。(在其他 Prologs 中,arity 0 的复合术语将是一个原子。) 例如:
?- functor(f(), _, Arity).
ERROR: functor/3: Domain error: `compound_non_zero_arity' expected, found `f()'
?- compound_name_arity(f(), _, Arity).
Arity = 0.