web-dev-qa-db-ja.com

Visual Prologの「等しくない」記号

Visual Prologに「等しくない」記号に関するドキュメントが見つかりません。この問題の正しい解決策を提供してください:

class predicates
        sister : (string Person, string Sister) nondeterm(o,o).
    clauses
        sister(Person, Sister) :-
            Person [not-equal-sign] Sister,
            parent(Person, Parent),
            parent(Sister, Parent),
            woman(Sister).
25
Egor

「等しくない」とはどういう意味かわかりません(統合しないのですか?)が、これらを試すことができます:

X \= Y
not(X = Y)
\+ (X = Y)
48
Kaarel

Kaarelが指摘した2番目のバリアントのドキュメントは、 このVisual Prologリファレンス ページにあります。

ただし、コードの問題はもう少し深くなります。用語PersonとSisterの両方がバインドされるまで、不平等のテストを待つ必要があるため、次のように再配置します。

    sister(Person, Sister) :-
        parent(Person, Parent),
        parent(Sister, Parent),
        not(Person = Sister),
        woman(Sister).

また、中置演算子「<>」の構文もあります。これは、別個の(または異なる)ことを意味します。 2つの用語がバインドされると、用語を統一できないかどうかをチェックするのと同じ結果が得られます。これが上記の構成の動作です。

6
hardmath