0

我理解这两个事实是用复杂的术语表达的,这些术语又以复杂的术语作为论据。术语嵌套在三个级别的术语中。

vertical(line(point(X,Y), point(X,Z))).

horizontal(line(point(X,Y), point(Z,Y))).

这是否意味着整个复杂项的元数为一个,因为其他复杂项是嵌套的?

4

1 回答 1

2

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

?- functor(vertical(line(point(X,Y), point(X,Z))), _, Arity).
Arity = 1.

如您所见,在这种特殊情况下,您的直觉是正确的!

SWI7 特定

由于您已将 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.
于 2014-12-30T14:15:25.030 回答