2 つの事実が複雑な用語を使用して表現されていることは理解していますが、これもまた複雑な用語を引数として持っています。ターム内にネストされた 3 つのレベルのタームがあります。
vertical(line(point(X,Y), point(X,Z))).
horizontal(line(point(X,Y), point(Z,Y))).
これは、他の複雑な項がネストされているため、全体的な複雑な項のアリティが 1 であることを意味しますか?
「複合項」と呼ばれるものは、通常、Prologでは複合項と呼ばれることに注意してください。次の方法で、Prolog 項のアリティを自分で簡単に確認できます。
?- functor(vertical(line(point(X,Y), point(X,Z))), _, Arity).
Arity = 1.
ご覧のとおり、この特定のケースでは、あなたの直感は正しかったのです!
SWI-Prolog タグを質問に追加したので、SWI 7 にはcompound_name_arity/3
、アリティ 0 の複合項で機能する もあることを知っておくと役立つ場合があります (他の Prolog では、アリティ 0 の複合項はアトムになります)。 。) 例えば:
?- functor(f(), _, Arity).
ERROR: functor/3: Domain error: `compound_non_zero_arity' expected, found `f()'
?- compound_name_arity(f(), _, Arity).
Arity = 0.