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