以下复杂术语的精神是什么?

时间:2014-12-30 14:10:24

标签: prolog logic arity

我理解这两个事实是用复杂的术语来表达的,这些术语的复杂术语也是参数。嵌套在术语中有三个级别的术语。

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

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

这是否意味着整体复杂术语具有一个arity,因为其他复杂术语是嵌套的?

1 个答案:

答案 0 :(得分:1)

请注意您所说的"复杂的术语"通常在Prolog中称为 coumpound terms 。您可以通过以下方式轻松检查Prolog术语:

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

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

SWI7特异性

由于您已将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.